Reputation: 105
I have a table with users
And a table with "shared" events
if I'm Scott (ID = 1), how I can select ONLY users who share my events AND add a special column with number off shared events like this
---- SOLVED ----
These two queries do the job:
Thanks to 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
Thanks to 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
)
)
Upvotes: 2
Views: 102
Reputation: 74
If you do not mind a single MySQL statement:
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;
Upvotes: 1
Reputation: 828
try this:
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
Upvotes: 1
Reputation: 37063
Try using self join on shared and joining with users table like:
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
Upvotes: 0