【问题标题】:Get row position in MYSQL query [duplicate]在MYSQL查询中获取行位置[重复]
【发布时间】:2011-10-26 19:57:25
【问题描述】:

可能重复:
ROW_NUMBER() in MySQL

这可能吗?我想按特定顺序得到一堆结果,然后通过行的id找出一行的位置,例如:

1, foo
2, bar
3, foobar

我想按字母顺序获取 1 的位置,它会返回 2

【问题讨论】:

  • 表是 InnoDB 还是 MyISAM?
  • MYSQL .... 假设我有一个用于在数据库中讨论的 cmets 列表。我想找到我在该特定讨论中指定的评论的位置。 (在 cmets 数据库中会有大量不同的 cmets 用于不同的讨论)
  • 我查看了那个页面,但是我真的没有得到 SQL,所以请你把相关的 MYSQL 放在这里供我使用,谢谢。
  • @Jake Stainer:嗯,你应该试着学习,而不是问“请给我密码”

标签: mysql sql


【解决方案1】:
SELECT id, name, rank FROM 
    (
    SELECT t.id, t.name,
        @rownum := @rownum + 1 AS rank
    FROM TABLE t, (SELECT @rownum := 0) r
    ORDER BY name ASC
    ) `selection` WHERE id=1

根据这个答案修改>>ROW_NUMBER() in MySQL

【讨论】:

  • IME,这仅在 InnoDB 表上是一致的。
  • 这对我来说太混乱了,我不明白
  • @JakeStainer AFAICT,子查询部分将您的表与变量 @rownum 连接起来,然后为每条记录递增 @rownum。我把整个事情放在一个子查询中,这样你就可以通过使用“WHERE id =”部分来获得排名。
  • 我一直在玩这个。它需要调整才能真正在 MySQL 中工作:
【解决方案2】:

工作答案(在 MySQL 中):

如果您有以下表格“名称”:

+------+--------+
| id   | name   |
+------+--------+
|    1 | foo    |
|    2 | bar    |
|    3 | foobar |
+------+--------+

而您想知道“foo”按字母顺序排列的位置,那么:

SELECT z.rank FROM (
    SELECT t.id, t.name, @rownum := @rownum + 1 AS rank
    FROM names t, (SELECT @rownum := 0) r
    ORDER BY name ASC
) as z WHERE id=1;

将产生:

+------+
| rank |
+------+
|    2 |
+------+

@potNpan 解决方案的变化是添加了as z 以及从@rownum = @rownum + 1@rownum := @rownum + 1 的变化。现在可以了:)

【讨论】:

  • 假设我想知道 id "2" 在这个表中的位置,然后我需要它返回 2(因为在这种情况下它是字母)谢谢
  • 这与 OP 的要求相反。您按字母顺序提供第一条记录,但 OP 想要 ID 为 1 的记录的排名(即按 ID 顺序排列的第一条记录)。无论如何,他可能想要一个更通用的解决方案来获得任何项目的字母顺序。
  • 假设我有一个用于在数据库中讨论的 cmets 列表。我想找到我在该特定讨论中指定的评论的位置。 (在 cmets 数据库中会有大量不同的 cmets 用于不同的讨论)
  • 哦,我想我明白了。我会努力做到这一点。
  • 我正在这样做,但只是得到计数而不是位置! SELECT discusComments.id, (SELECT COUNT(*) FROM discusComments WHERE (discusComments.id discusComments.id) AND (topicID = 4)) 作为位置从@987654334 @ WHERE discusComments.id = 68 AND (topicID = 4)
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 2019-06-26
  • 2013-04-03
  • 2011-04-06
相关资源
最近更新 更多