MySQL在ORDER BY中获取行位置

本教程将介绍MySQL在ORDER BY中获取行位置的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

MySQL在ORDER BY中获取行位置 教程 第1张

问题描述

使用以下 MySQL 表:

+-----------------------------+
+ id INT UNSIGNED +
+ name VARCHAR(100)  +
+-----------------------------+

当按name ASC 排序时,怎么选择 行及其在表中其他行中的位置.所以如果表数据是这样的,按名称排序时:

+-----------------------------+
+ id | name +
+-----------------------------+
+  5 | Alpha+
+  7 | Beta +
+  3 | Delta+
+ .....  +
+  1 | Zed  +
+-----------------------------+

怎么选择 Beta 行以获得该行的当前位置?我正在寻找的结果集是这样的:

+-----------------------------+
+ id | position | name  +
+-----------------------------+
+  7 |  2 | Beta  +
+-----------------------------+

我可以做一个简单的 SELECT * FROM tbl ORDER BY name ASC 然后枚举 PHP 中的行,但是只为一行加载一个可能很大的结果集似乎很浪费.

推荐答案

使用这个:

SELECT x.id, 
 x.position,
 x.name
  FROM (SELECT t.id,
t.name,
@rownum := @rownum + 1 AS position
 FROM TABLE t
 JOIN (SELECT @rownum := 0) r
ORDER BY t.name) x
 WHERE x.name = 'Beta'

...获取唯一的位置值.这个:

SELECT t.id,
 (SELECT COUNT(*)
 FROM TABLE x
WHERE x.name <= t.name) AS position,
 t.name 
  FROM TABLE t
 WHERE t.name = 'Beta'

...会给关系相同的值.IE:如果第二个位置有两个值,当第一个查询将位置 2 分配给其中一个,将 3 分配给另一个时,它们的位置都会为 2...

好了关于MySQL在ORDER BY中获取行位置的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。