mysql - 获取结果中的行位置?

标签 mysql sql

如何在这个 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/

相关文章:

php - 作为 cronjob 运行脚本时为 "MySQL server has gone away"

MYSQL-使用 sum(case when condition 1) 和 count(case when condition 1) 时得到不同的结果

mysql - 如何在mysql数据库中记录插入时间

java - 有一个sql PreparedStatement池有意义吗?

mysql - "ssl : true"是使用 ssl 连接到 mysql 服务器的有效选项吗

mysql - JSF webApplication - glassfish 服务器遇到内部错误

mysql - 需要在 SQL 中做一个简单的查找/替换

sql - SELECT 语句中列的顺序是否有所不同?

mysql - 查找过去 24 小时内具有日期字段的记录

mysql - 如何计算 group by 子句中的多列和一列中的多个不同值