Помогите составить запрос

sangre

Новичок
Помогите составить запрос

Есть таблица group_user
Id_g | id_u
1 | 2
1 | 3
2 | 3
2 | 2
2 | 4
3 | 2
4 | 2
4 | 3
5 | 2
5 | 4

Можно ли одним запросом вытянуть для id_g список id_g как минимум с таким же набором id_u.

например
для Id_g=1
мы получим список
List = 2, 4
 

sangre

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

sangre

Новичок
немного не то
нужно что бы на запрос
select id_g from group_user ...... id_g=1
ответ был 2 строки (записи)
id_g
2
4
 

FractalizeR

Новичок
Зачем? Не проще потом в PHP разнести, что вам нужно? Кроме того, не id_g, а id_u, я так понимаю?

Какова исходная задача? Что такое id_g, id_u?
 

sangre

Новичок
id_g - это ид группы
id_u - это ид юзера

нужно по группе вытянуть группы как минимум с таким же набором юзеров. Заказчик типа умный говорит можно это вытянуть одним запросом.
 

Mols

Новичок
Я конечно строю всё на допущении в данный момент. Но я практически уверен, что есть таблица с группами. А если это так то вот такая конструкция решит поставленную задачу. (В примере я таблицу с группами обозначил `groups` )
[SQL]
select g.id as out_g_id, count(g.id) as g_id_c from `groups` g
inner join `group_user` g_u on g.id = g_u.id_g
where g_u.id_u in (select id_u from `group_user` where id_g=1 )
group by g.id HAVING g_id_c >= (select count(id_u) from `group_user` where id_g=1)
[/SQL]
Хотя конечно смысла делать это всё в один запрос я лично не вижу.

Сразу не написал... думаю это очевидно но всё-таки решил добавить.
если таблицы с группами у Вас нет(сложно такое представить, но с вашим заказчиком всего ждать можно :D ).
[SQL]
select g.id as out_g_id, count(g.id) as g_id_c from (select DISTINCT id_g as id from `group_user`) g
inner join `group_user` g_u on g.id = g_u.id_g......
[/SQL]
ну и дальше как в первом варианте.
 

NeD

Новичок
[sql]
SELECT g2.id_g, count( g2.id_u ) AS cnt, ( SELECT count( id_u ) FROM groups WHERE id_g =g.id_g) AS cnt2
FROM groups AS g
INNER JOIN groups AS g2 ON g.id_u = g2.id_u
WHERE g.id_g =1 AND g.id_g != g2.id_g
GROUP BY g2.id_g
HAVING cnt >= cnt2
[/sql]
 

Mols

Новичок
NeD
это коан ?

-~{}~ 08.02.08 12:45:

sangre
что помогло то ? какой запрос ?
 

Mols

Новичок
FractalizeR
Так получится только полное соответствие. А нужно найти все группы в которых есть все пользователи исходной группы. То есть в найденных группах пользователей может быть и больше чем в исходной, но "множество пользователей" исходной группы должно быть "подмножеством множества пользователей" для каждой из найденных групп.
Фух )

-~{}~ 08.02.08 12:59:

NeD
ну я не могу понять что делает Ваш запрос. точнее он в исходном виде вообще не работает. Попытки понять что должно быть на месте t1.id_g и вообще что должно быть результатом Вашего запроса у меня успехом не увенчались. Можете пояснить, что делает Ваш запрос ?
А то он без комментариев. И (на мой взгляд) очень напоминает коан мастеров дзен )))
 
Сверху