|
|
|
| Допустим таблица содержит такие данные:
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)
|
выдаст не верные все три товара, вместо одного | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Sfinks
(15.11.2013 в 09:35)
| | Ура, работает, большое спасибо
FROM( SELECT * FROM product_type WHERE id_type IN (3,15))t
|
В фразе "FROM () t" какую роль играет буква"t"?
И еще вопрос - этот запрос быстрый? Если есть десятки тысяч товаров с десятками характеристик. запрос не зависнет? Он быстрее чем запрос JOIN? | |
|
|
|
|
|
|
|
для: renat
(15.11.2013 в 12:30)
| | > В фразе "FROM () t" какую роль играет буква"t"?
t - это алиас результирующей выборки вложенного подзапроса.
> И еще вопрос - этот запрос быстрый? Если есть десятки тысяч товаров с десятками характеристик. запрос не зависнет?
Зависит от количества строк результата выборки вложенного подзапроса. Дело в том, что выборка во вложенном подзапросе будет идти по индексу, т.е. быстро. Но вот в его результате уже индексов не будет. И внешняя обработка будет довольно медленной.
> Он быстрее чем запрос JOIN?
А как вы это с JOIN сделаете? | |
|
|
|
|
|
|
|
для: Sfinks
(15.11.2013 в 12:51)
| | С подбором характеристик проблемы.
Сейчас я составляю на конкретный вид товара свою таблицу в которой есть все характеристики
№, наименование, производитель, цвет и т.д.
Завпрос выглядит просто, а главное быстро
"SELECT id FROM product WHERE цвет='13' and призводитель='3' и т.д."
Проблема в том, что характеристик получается очень много и таблицы выглядят громоздкими с многочисленными колонками.
Хотел все характеристики вынести в отдельную таблицу и от туда уже доставать номер товара по заданным характеристикам. Но наверное оставлю как есть, потому что делать выборку нужно очень часто. | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: Igorek
(15.11.2013 в 15:27)
| | Хм... Возможно вы и правы =) | |
|
|
|