MySQL:过滤JOINed行

时间:2012-09-10 21:55:59

标签: mysql join where-clause

好吧,说我有这样的联接查询:

SELECT users.*
FROM users
LEFT JOIN votes ON (users.id = votes.userid)
GROUP BY users.id
HAVING count(votes.id) >= 0
ORDER BY count(votes.id) LIMIT 0,30

users获取行,按votes表中与他们有关系的行数排序。

我的问题:使用像WHERE votes.timestamp BETWEEN date_add(NOW(),INTERVAL -24 HOUR) AND NOW()这样的WHERE子句的正确方法是什么,这样users只根据过去24小时内与之建立关系的行数进行排序?

能够这样做是有意义的,我只是不确定在哪里放置它。

1 个答案:

答案 0 :(得分:1)

将其添加到ON子句:

LEFT JOIN votes ON (users.id = votes.userid) AND (votes.timestamp BETWEEN date_add(NOW(),INTERVAL -24 HOUR) AND NOW())

如果将条件放在WHERE子句中,则可能会完全消除用户,从而否定了LEFT JOIN的用途。 ON子句不会有这个问题。