为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL按顺序获得行位置

MySQL按顺序获得行位置

精慕HU 2019-08-03 03:03:43
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中的行,但是仅仅为一行加载一个可能很大的结果集似乎是浪费的。
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

这是我唯一能想到的办法:

SELECT `id`,
       (SELECT COUNT(*) FROM `table` WHERE `name` <= 'Beta') AS `position`,
       `name`FROM `table`WHERE `name` = 'Beta'


查看完整回答
反对 回复 2019-08-04
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

如果查询很简单,并且返回的结果集的大小可能很大,则可以尝试将其拆分为两个查询。

第一个查询具有窄带筛选条件,仅用于检索该行的数据,第二个查询使用COUNT带着WHERE子句来计算位置。

例如,在您的情况下

查询1:

SELECT * FROM tbl WHERE name = 'Beta'

查询2:

SELECT COUNT(1) FROM tbl WHERE name >= 'Beta'

我们在一个有2M记录的表中使用这种方法,这比OMG的方法更具可伸缩性。




查看完整回答
反对 回复 2019-08-04
  • 3 回答
  • 0 关注
  • 418 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信