5

是否可以在 MySQL 中获取行号?假设我有一张“桌子”

ID  tag name
1   A   alpha
4   B   beta
5   C   gamma
8   D   ceta

我怎样才能在 MySQL 中获得,例如,'C' 是该表中的第 3 行?下列的:

SET @pos=0;
SELECT @pos:=@pos+1,tag FROM table ORDER BY tag ASC;

按应有的方式计算行数。但是(对不起无知的代码)

SET @pos=0;
SELECT @pos:=@pos+1,tag FROM table where tag='C' ORDER BY tag ASC;

结果给出了 1 行,其中 pos 为 0,它可能应该如此。

有没有办法让'pos'成为我需要的'3'?(排序也很重要,无论它是否与问题相关..)

4

3 回答 3

4

你可以用这个

Select rownum from (
SELECT @rownum:=@rownum+1 rownum, t.*FROM (SELECT @rownum:=0) r, table t order by tag) as t1
where tag = 'C'
于 2013-05-05T18:47:21.693 回答
1

如果您的 ID 严格按照行号增加,您可以这样做

SELECT COUNT(*) FROM tbl WHERE ID <= (SELECT ID FROM tbl WHERE tag = 'C');

我不确定您所说的订购是什么意思。

旁注:您的代码

SET @pos=0;
SELECT @pos:=@pos+1,tag FROM tbl where tag='C' ORDER BY tag ASC;

不能工作,因为这里@pos 只对结果集进行操作,结果集只包含一条记录。

于 2013-05-05T18:39:54.183 回答
0

实际上,我之前没有考虑过一种可能性:

SELECT count(1) FROM table WHERE tag <= 'C' ORDER BY tag

这似乎做同样的事情,而且速度更快..还是我错过了什么?

于 2013-05-05T20:10:52.143 回答