MySQL запрос.

Any0ne

Новичок
Есть таблица вида:
num| тип
46 | 3
46 | 6
47 | 3
47 | 7
48 | 3
48 | 5
48 | 1
48 | 2
48 | 4

Как сделать запрос, чтобы на выходе были только номера num где в столбце тип были значения и 1 и 2?
(на примере это 48).
Как сделать только по 1 и по 2 понимаю, а как найти среди них общие нет.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
WHERE type=1 OR type=2
WHERE type IN(1,2)
 

Any0ne

Новичок
Спасибо, но это немного не то.

WHERE type=1 OR type=2
WHERE type IN(1,2)
Уточню, еще:
Как сделать запрос, чтобы на выходе были только номера num где в столбце тип были значения и 1 и 2?
То есть там где есть только 1 или только 2 мне не нужны.
PHP:
mysql> select distinct num from tbl where type = 1;
+----------+
| num |
+----------+
|       36 | 
|       37 | 
|       38 | 
|       39 | 
|       40 | 
|       41 | 
|       44 | 
|       45 | 
|       46 | 
|       51 | 
|       52 | 
|       53 | 
|       55 | 
|       56 | 
|       57 | 
+----------+
15 rows in set (0,00 sec)

mysql> select distinct num from tbl where type = 2;
+----------+
| num |
+----------+
|       45 | 
|       55 | 
+----------+
2 rows in set (0,02 sec)
Нужно чтобы выдало 45 и 55, так как в них есть и 1 и 2.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
select distinct num, COUNT(num) as cnt from num WHERE type IN(1,2) GROUP BY num HAVING cnt > 1;
 

Dovg

Продвинутый новичок
Код:
plus1=> create temp table trololo (id int, type_id int);
CREATE TABLE
plus1=> insert into trololo values (1,2), (2,1), (3,2), (48,1), (48,2);
INSERT 0 5
plus1=> select t1.id from trololo t1 join trololo t2 on (t1.id = t2.id) where t1.type_id = 1 and t2.type_id = 2;
 id
----
 48
(1 row)
Я бы вот так сделал.
 

iceman

говнокодер
Dovg
чем это лучше? помоему только тормаза прибавит.
 

Dovg

Продвинутый новичок
iceman
я не заявлял, что это лучше.

О тормозах можно рассуждать только после того, как появятся explainы
 

Any0ne

Новичок
select distinct num, COUNT(num) as cnt from num WHERE type IN(1,2) GROUP BY num HAVING cnt > 1;
Большое Вам спасибо. Все-таки без опыта, без знаний даже любое тривиальное решение кажется невыполнимой задачей.
Про создание таблиц думал, но это запрос статистики. База то дополнятся будет. Значений 1 и 2 будет много, это как удавшиеся общение в аське(user1 и user2), а остальное системные сообщения.
Остался еще один вопрос, но вначале гугл и мозговой штурм.
 

phprus

Moderator
Команда форума
Any0ne
count же подсчитывает количество строк удовлетворяющих условиям или я не прав?
Количество строк в группе.
Разбиение на группы и группировку выполняет GROUP BY.
HAVING фильтрует результат работы групбай.
Вот и получается, что если cnt == 2, то сработали оба условия по type.
 
Сверху