2016-09-12 2 views
2

У меня есть таблица с пользователямиSELECT, пользователи и сосчитать объекты, используемые совместно в MySQL

enter image description here

и стол с "общим" событий

enter image description here

если я Скотт (ID = 1), как я могу выбрать ТОЛЬКО пользователей, которые делятся моими событиями И добавьте специальный столбец с номером от общих событий, подобных этому

enter image description here

---- решаемые ----

Эти два запроса сделать работу:

Благодаря user6368519

SELECT 
    t2.ID, 
    t2._name, 
    t2._email, 
    COUNT(*) _shared 
FROM _user_events t1 
INNER JOIN _users t2 ON (t1._user = t2.id) 
WHERE _event IN (SELECT _event FROM _user_events t3 WHERE t3._user = 1) 
AND t1._user <> 1 
GROUP BY 1,2 

Благодаря S. Garces

SELECT 
    users.ID, 
    users._name, 
    users._email, 
    (
     SELECT COUNT(*) 
     FROM _user_events 
     WHERE _user = users.ID 
     AND _event IN (
      SELECT _event FROM _user_events WHERE _user = 1 
     ) 
    ) as _shared 
FROM _users users 
WHERE ID != 1 
AND ID IN (
    SELECT _user 
    FROM _user_events 
    WHERE _event IN (
     SELECT _event FROM _user_events WHERE _user = 1 
    ) 
) 

ответ

0

Попробуйте использовать самостоятельно вступить в общий и объединения с таблицей пользователей, как:

SELECT id, name, email, id 
FROM users u INNER JOIN 
    (SELECT DISTINCT s2._user 
    FROM shared s1 INNER JOIN Shared s2 
    ON s1._event = s2._event 
    WHERE s1._user = 1) temp 
ON u.id = temp.user 
1

попробовать это:

SELECT user.ID, user._name user._email, 
 
(SELECT count(*) FROM shared_event where _user = user.id and _event in 
 
    (SELECT _event from shared_event where _user = 1) 
 
) as _shared 
 
FROM USER WHERE ID != 1

1

Если вы не против одного заявления MySQL :

SELECT t1._user ID,t2._name,t2._email,COUNT(*) _shared 
    FROM shared t1 INNER JOIN user t2 ON (t1._user=t2.id) 
    WHERE _event IN (SELECT _event FROM shared t3 WHERE t3._user=1) 
     AND t1._user<>1 
    GROUP BY 1; 
Смежные вопросы