我有一个SQL查询来获取用户拥有的“喜欢”数量。有两个不同的表,一个表包含不同的用户数据(不是喜欢的数量)。另一张表中包含类似的日志,例如谁给出了类似的内容,谁接收了类似内容,何时受到喜欢等等。我正在创建最喜欢的用户的前十名列表。
我想知道的是,在运行查询时是否可以使用列的当前值作为参数,如下所示:
SELECT `username` FROM `users` ORDER BY (SELECT COUNT(*) FROM `likes` WHERE `liked_user`=?) LIMIT 10
问号会被代表username
的当前值的东西替换(我假设SQL必须做某种循环才能得到结果)
我的另一个选择是在用户表中有一个列,其中包含喜欢的数量,然后根据它进行排序,但我想知道查询是否可以通过查看类似的日志来执行相同的工作。
答案 0 :(得分:2)
是的,你可以这样做。应该如此简单:
SELECT u.`username`
FROM `users` u
ORDER BY (SELECT COUNT(*)
FROM `likes` l
WHERE l.`liked_user` = u.`username`)
LIMIT 10
您也可以在没有子查询的情况下执行相同操作:
SELECT u.`username`
FROM `users` u
JOIN `likes` l ON l.`liked_user` = u.`username`
GROUP BY u.`username`
ORDER BY COUNT(*)