如何在这个 SQL 的结果中使用 @row_number 作为位置行:
SELECT s.*,
s2.priority AS `priority`,
@row_number := @row_number := @row_number + 1 AS `top`
FROM (SELECT @row_number := 0) init, `server` s
LEFT JOIN servers_services ss ON (s.id = ss.server_id)
LEFT JOIN service s2 ON (s2.id = ss.service_id)
WHERE s.is_banned = 0
ORDER BY ss.service_id IS NULL, priority DESC
@row_number 取值 {1, 12, 89 ...} 为什么?
最佳答案
我没有在 MySQL 中使用变量的经验,所以我的回答可能是错误的。
我的猜测是:您将行号与表格交叉连接。然后在 WHERE 子句中,您取消了记录,因此您只剩下一些原始行号。
至于如何解决这个问题,我想首先不要加入不需要的记录应该会有所帮助:
FROM (SELECT @row_number := 0) init
JOIN server s ON s.is_banned = 0
LEFT JOIN servers_services ss ON (s.id = ss.server_id)
LEFT JOIN service s2 ON (s2.id = ss.service_id)
关于mysql - 获取结果中的行位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902565/