Mysql 使用SQL获取文章最受欢迎的作者

Mysql 使用SQL获取文章最受欢迎的作者,mysql,sql,Mysql,Sql,基本上我有3个表,用户,帖子,动作(动作是喜欢的)。用户可以喜欢彼此的帖子。我想找到在过去7天里最受欢迎的前10位作者。我的查询如下所示,它是有效的,但我怀疑我的查询是否真的有效。是否可以对其进行优化以提高性能 查询: SELECT u.*, COUNT(a.post_id) as likes FROM Actions AS a LEFT JOIN Posts p ON p.id = a.post_id LEFT JOIN Users AS u ON u.id = p.user_id WHERE

基本上我有3个表,用户,帖子,动作(动作是喜欢的)。用户可以喜欢彼此的帖子。我想找到在过去7天里最受欢迎的前10位作者。我的查询如下所示,它是有效的,但我怀疑我的查询是否真的有效。是否可以对其进行优化以提高性能

查询:

SELECT u.*, COUNT(a.post_id) as likes
FROM Actions AS a
LEFT JOIN Posts p ON p.id = a.post_id
LEFT JOIN Users AS u ON u.id = p.user_id
WHERE a.dateCreated >= DATE_ADD(NOW(), INTERVAL -7 DAY)
GROUP BY u.id
ORDER BY likes DESC
LIMIT 10
用户

帖子

行动


这是一个非常简单直接的查询。我不认为在这个查询中会有任何进一步的优化,除非确保您已经创建了索引,并且只选择那些列,而不是使用Astrickt。这个查询看起来还可以。但是为什么要使用
左连接
?每个操作都与post相关,post表中必须存在post。每个帖子都是由用户制作的,用户表中必须存在该用户。此外,为了保持一致性,您使用
将actions和users表别名为u
,但在post中缺少
AS
。没什么大不了的,只是为了保持一致。@Ravi我已经在使用必要的,只是为了保持简短,我使用了*。非常感谢@施密茨加入左翼对我来说更像是一种习惯,我想:)只是为了确保。哦,是的,不知怎么的,我错过了。谢谢你,朋友。@Elnoor这是个坏习惯;)在适当的地方使用它(即,您需要查看所有客户,即使他们没有下订单)。