MySQL在ORDER BY中获得行位置

用下面的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中获得行位置 的全部内容, 来源链接: utcz.com/qa/416534.html

回到顶部