MySQL按顺序获得行位置

MySQL按顺序获得行位置

使用以下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中的行,但是仅仅为一行加载一个可能很大的结果集似乎是浪费的。


精慕HU
浏览 419回答 3
3回答

湖上湖

这是我唯一能想到的办法:SELECT&nbsp;`id`, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;`table`&nbsp;WHERE&nbsp;`name`&nbsp;<=&nbsp;'Beta')&nbsp;AS&nbsp;`position`, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`name`FROM&nbsp;`table`WHERE&nbsp;`name`&nbsp;=&nbsp;'Beta'

慕尼黑8549860

如果查询很简单,并且返回的结果集的大小可能很大,则可以尝试将其拆分为两个查询。第一个查询具有窄带筛选条件,仅用于检索该行的数据,第二个查询使用COUNT带着WHERE子句来计算位置。例如,在您的情况下查询1:SELECT * FROM tbl WHERE name = 'Beta'查询2:SELECT COUNT(1) FROM tbl WHERE name >= 'Beta'我们在一个有2M记录的表中使用这种方法,这比OMG的方法更具可伸缩性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL