MySQL - 查询记录的行号

3

我在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','%')

对于上述查询,我得到了外部查询的行号。但我想要内部查询的行号。我不知道如何获取它。
任何帮助都将不胜感激。谢谢。

一些阅读材料:http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/ - biziclop
1个回答

10

或许可以尝试这个:

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','%')

嗨,伊万,这个查询非常完美。但是我无法在PHP中同时执行两个查询。所以你能修改这些查询使其作为一个单一的查询运行吗? - Vivek
1
我自己搞定了。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','%'); - Vivek
1
太棒了,我也想到了同样的解决方案 :) - Ivan Peevski
当我在PHP中执行相同的查询时,我会得到这个错误 每个派生表都必须有自己的别名。你有任何解决方法吗? - Vivek
在执行 order by 子句之前,该行号是计算出来的。如果您的语句中有 order by 子句,则可以看到不同顺序的行号。 - Hiran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接