Mysql SQL-使用列名的值作为参数

Mysql SQL-使用列名的值作为参数,mysql,sql,Mysql,Sql,我有一个SQL查询来获取用户的“喜欢”数量。有两个不同的表,一个表包含不同的用户数据(不是喜欢的数量)。另一个表包含相似的日志,例如谁提供了相似的、谁收到了相似的、何时被喜欢等。我正在创建最受欢迎用户的前十名列表 我想知道的是,在运行查询时,是否可以使用列的当前值作为参数,如下所示: SELECT `username` FROM `users` ORDER BY (SELECT COUNT(*) FROM `likes` WHERE `liked_user`=?) LIMIT 10 其中问号将

我有一个SQL查询来获取用户的“喜欢”数量。有两个不同的表,一个表包含不同的用户数据(不是喜欢的数量)。另一个表包含相似的日志,例如谁提供了相似的、谁收到了相似的、何时被喜欢等。我正在创建最受欢迎用户的前十名列表

我想知道的是,在运行查询时,是否可以使用列的当前值作为参数,如下所示:

SELECT `username` FROM `users` ORDER BY (SELECT COUNT(*) FROM `likes` WHERE `liked_user`=?) LIMIT 10
其中问号将替换为表示
username
当前值的内容(我假设SQL必须进行某种循环才能获得结果)


我的另一种选择是在用户表中有一列保存like的数量,然后根据它对数据进行排序,但我想知道查询是否可以通过查看like日志来执行相同的任务。

是的,您可以这样做。应尽可能简单:

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(*)

似乎有一个模棱两可的问题。在likes表中表示谁喜欢该用户的列的名称与在user列中表示该用户名称的列的名称相同。因此,第二次指定
username
时,它认为需要likes表中的值,而不是user表中的值。