【问题标题】:MySQL - Select row number of a recordMySQL - 选择记录的行号
【发布时间】:2012-01-04 07:42:03
【问题描述】:

我在 MySQL 中有一个表填充如下。现在我需要按排序顺序选择记录的行号。比如'c'开头的单词的行数应该是4

Words
=====
coffee
banana
apple
cherry
blackberry

我尝试了以下查询,但得到了错误的结果。这里dict是表名,words是列名。

SELECT @rownum:=@rownum + 1 id FROM (SELECT * FROM dict ORDER BY words) d,(SELECT @rownum:=0) r WHERE d.words LIKE CONCAT('c','%')

对于上述查询,我​​正在获取外部查询的行号。但我想要内部查询的行号。我不知道如何得到。

感谢任何帮助。谢谢。

【问题讨论】:

标签: mysql row-number


【解决方案1】:

不妨试试这个:

SET @rownum = 0;
SELECT id 
FROM (SELECT *, @rownum:=@rownum + 1 AS id FROM dict ORDER BY words) d
WHERE d.words LIKE CONCAT('c','%')

作为单个查询,试试这个:

SELECT id 
FROM (SELECT *, @rownum:=@rownum + 1 AS id FROM dict, (SELECT @rownum:=0) r ORDER BY words) d
WHERE d.words LIKE CONCAT('c','%')

【讨论】:

  • 嗨,Ivan,这个查询非常有效。但我无法在 PHP 中一次执行两个查询。那么您可以修改查询以作为单个查询运行吗?
  • 我自己弄的。 SELECT id FROM (SELECT *, (at)rownum:=(at)rownum + 1 AS id FROM dict,(SELECT @rownum:=0) r ORDER BY words) d WHERE d.words LIKE CONCAT('b',' %');
  • 太棒了,我刚刚想出了相同的解决方案 :)
  • 当我在 PHP 中执行相同的查询时,我收到此错误 Every derived table must have its own alias。你知道如何解决这个问题吗?
  • 这是我的错误。更正了它。现在工作。谢谢。
猜你喜欢
  • 2014-06-28
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多