假设号码列表是一组您感兴趣的朋友(倒不如将它们存储在一个表中 - 这就是你如何在数据库中记录的信息),则:
SELECT e.id, e.name, COUNT(*) AS friends
FROM attendance AS a
JOIN event AS e ON a.event = e.id
WHERE a.user IN (1,2,3,4,5,6,7,8,9,10,11,12,13,444,153)
GROUP BY e.id, e.name;
复杂性,当然,是在旁观者的眼睛 - 这实际上不是复杂。请注意,正如所写的,它没有列出没有任何朋友去往的事件。如果你想要的,你需要一个LEFT OUTER JOIN和你所需要的“朋友过滤器”比主WHERE子句前面:
SELECT e.id, e.name, COUNT(user) AS friends
FROM event AS e
LEFT OUTER JOIN
(SELECT user, event
FROM attendance
WHERE user IN (1,2,3,4,5,6,7,8,9,10,11,12,13,444,153)
) AS a
ON a.event = e.id
GROUP BY e.id, e.name;
的COUNT(用户)合计返回零如果一个组中的所有行包含NULL在用户列中。
未经测试的SQL。
工作perefectly ..谢谢! – Amir 2011-01-22 15:18:11