【问题标题】:order by dates that match criteria按符合条件的日期排序
【发布时间】:2011-07-28 21:48:05
【问题描述】:

我有以下查询,按降序输出在过去一周中获得最多收藏的用户:

SELECT COUNT(faves.user_id) AS topFaves, faves.created_on, user_name 
FROM users 
INNER JOIN faves ON faves.user_id= users.id 
WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= created_on 
GROUP BY id ORDER BY topFaves DESC

我希望能够扩展此列表以包含所有用户,而不仅仅是从过去一周开始,但仍然按照相同的标准对他们进行排序(他们在过去一周中获得的收藏数量,而不是根据他们总共拥有的最爱)。 我试图在选择中包含一个子查询,但没有任何运气。

提前感谢您的帮助

【问题讨论】:

  • 上述查询是否有效??请详细说明

标签: php mysql group-by sql-order-by subquery


【解决方案1】:

也许我遗漏了什么,但只需删除这一行:

WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= created_on 

您将拥有“所有用户” - 仍按 topFaves 排序...

此外,如果您想列出所有人(不仅仅是 10 人),您需要删除:

LIMIT 10

【讨论】:

  • 谢谢,但我想列出所有用户,但仍按他们在过去一周收到的收藏数而不是按总收藏数对他们进行排序..
  • @Jack - 好的,created_on 在你的users 表或faves 表中?在您的 WHERE 子句中,您没有指定。这可能是你的答案。
  • created_on 字段在 faves 表中。那我应该如何更改 WHERE 子句?
  • @Jack 这个怎么样:SELECT COUNT(faves.user_id) AS topFaves, faves.created_on, user_name FROM users LEFT JOIN faves ON faves.user_id= users.id WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) &lt;= faves.created_on GROUP BY id ORDER BY topFaves DESC 如果我错了,请纠正我,但 LEFT 连接将从用户表中取出所有内容,并相应地计算您的 WHERE 子句。我会确保您指定 faves.created_on - 而不仅仅是“created_on”
  • 好的,现在它给了我每个用户在过去一周获得的喜爱的数量,但我仍然没有得到本周获得零喜爱的用户。你看这是我的问题,一旦我将 WHERE 限制在过去一周,它就会过滤掉其余的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多