Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из столбца таблицы
 
 автор: renat   (14.11.2013 в 22:41)   письмо автору
 
 

Допустим таблица содержит такие данные:

id - id_products - id_type
1 - 1 - 3
2 - 1 - 15
3 - 2 - 3
4 - 2 - 2
5 - 2 - 10
6 - 3 - 15
7 - 3 - 4

Как можно выбрать товар с конкретными характеристиками?
Допустим с "3" и "15" - Это должен быть только тавар "1", т.к. у товара "2" есть только характеристика "3", а у товара "3" - только характеристика "15"

Как будет выглядит запрос базе данных, если это возможно?

Запрос вида:

SELECT id_product FROM product_type WHERE id_type IN (3,15)


выдаст не верные все три товара, вместо одного

  Ответить  
 
 автор: Sfinks   (15.11.2013 в 09:35)   письмо автору
 
   для: renat   (14.11.2013 в 22:41)
 

SELECT id_product
FROM( SELECT *
      FROM product_type
      WHERE id_type IN (3,15)
)t
GROUP BY id_product
HAVING count(*) >= 2

  Ответить  
 
 автор: renat   (15.11.2013 в 12:30)   письмо автору
 
   для: Sfinks   (15.11.2013 в 09:35)
 

Ура, работает, большое спасибо

FROM( SELECT * FROM product_type WHERE id_type IN (3,15))t


В фразе "FROM () t" какую роль играет буква"t"?

И еще вопрос - этот запрос быстрый? Если есть десятки тысяч товаров с десятками характеристик. запрос не зависнет? Он быстрее чем запрос JOIN?

  Ответить  
 
 автор: Sfinks   (15.11.2013 в 12:51)   письмо автору
 
   для: renat   (15.11.2013 в 12:30)
 

> В фразе "FROM () t" какую роль играет буква"t"?
t - это алиас результирующей выборки вложенного подзапроса.

> И еще вопрос - этот запрос быстрый? Если есть десятки тысяч товаров с десятками характеристик. запрос не зависнет?
Зависит от количества строк результата выборки вложенного подзапроса. Дело в том, что выборка во вложенном подзапросе будет идти по индексу, т.е. быстро. Но вот в его результате уже индексов не будет. И внешняя обработка будет довольно медленной.

> Он быстрее чем запрос JOIN?
А как вы это с JOIN сделаете?

  Ответить  
 
 автор: renat   (15.11.2013 в 13:06)   письмо автору
 
   для: Sfinks   (15.11.2013 в 12:51)
 

С подбором характеристик проблемы.

Сейчас я составляю на конкретный вид товара свою таблицу в которой есть все характеристики

№, наименование, производитель, цвет и т.д.

Завпрос выглядит просто, а главное быстро

"SELECT id FROM product WHERE цвет='13' and призводитель='3' и т.д."

Проблема в том, что характеристик получается очень много и таблицы выглядят громоздкими с многочисленными колонками.

Хотел все характеристики вынести в отдельную таблицу и от туда уже доставать номер товара по заданным характеристикам. Но наверное оставлю как есть, потому что делать выборку нужно очень часто.

  Ответить  
 
 автор: Igorek   (15.11.2013 в 15:27)   письмо автору
 
   для: Sfinks   (15.11.2013 в 09:35)
 

А зачем здесь вложенный запрос?
Может так просто:
SELECT id_products 
FROM product_type
WHERE id_type IN (3, 15)
GROUP BY id_products
HAVING COUNT(*) >= 2

  Ответить  
 
 автор: Sfinks   (15.11.2013 в 19:48)   письмо автору
 
   для: Igorek   (15.11.2013 в 15:27)
 

Хм... Возможно вы и правы =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования