Вроде простой запрос....

Cyrill

Новичок
Вроде простой запрос....

Помогите составить запрос
Есть таблица
----------------------------
| product_id | type_id |
----------------------------
| 1 | 1 |
| 1 | 4 |
| 2 | 1 |
| 4 | 3 |
| 7 | 1 |
----------------------------


Нужно сделать выборку элементов, у которых type_id 1 и 4

Я Пишу
SELECT * FROM table WHERE type_id = 1 AND type_id =4


Не правильно. А в чем я не прав ?

Заранее спасибо :)
 

Wicked

Новичок
"Нужно сделать выборку элементов, у которых type_id 1 и 4"

Типичная ошибка. Type_id 1 и 4 подразумевает одновременное равенство 1 == type_id == 4, что невозможно, т.к. 1 != 4. Поэтому ты должен _думать_ так: у которых "type_id 1 или 4", что в коде будет выглядеть как type_id = 1 or type_id = 4, или, в более короткой записи type_id in (1, 4).
 

Cyrill

Новичок
Wicked
но ведь при таком варианте выберутся и те у которых type_id только 1 или только 4
 

Wicked

Новичок
Именно так.

Теперь возникло подозрение, что тебе нужны такие product_id, для которых есть пары (product_id, 1) и (product_id, 4). Т.е. продукт относится сразу к двум типам. Так?

Из первого поста это не очевидно :)
 

Cyrill

Новичок
Wicked да, именно так, прошу прощения, если непонятно описал вопрос сразу
 

Wicked

Новичок
либо
select product_id, count(distinct type_id) as c
from таблица
where type_id in (1, 4)
group by product_id
having c = 2;
 

bgm

 
SELECT t1.product_id
FROM `table` AS t1, `table` AS t2
WHERE t1.product_id = t2.product_id
AND t1.type_id =1
AND t2.type_id =4

P.S. Старайся в выборке не использовать символ *
 

Wicked

Новичок
bgm
сдается мне, что ему потребуется решать задачу в общем виде... а джоинить таблицу саму на себя переменное кол-во раз - довольно некрасиво.
 

bosh

Новичок
Так, на пьяную голову:
[SQL]select product_id,group_concat(type_id order by type_id) as types from test1 where type_id in(1,4) group by product_id having types='1,4';[/SQL]
Наверняка с утра придумаю поизящнее :)
 
Сверху