2013-05-05 19 views
4

是否可以在MySQL中獲取行號?說我有一個'表'mySQL中的行號

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

我怎麼能在MySQL中,例如,'C'是該表中的第三行?如下:

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

按照它應該計數的行數。但(對不起,不好意思)

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

給出1行,結果爲pos,因爲它可能應該。

有沒有辦法讓'pos'爲'3',因爲我需要它? (訂貨會同樣重要,無論是相關的問題或不..)

+0

[如何知道MySql中特定行的行號?](http://stackoverflow.com/q/10765746/1037210)。一個未答覆的問題,但它包含一個SQL查詢來獲取特定行的行號。 – Lion 2013-05-05 18:44:30

+1

表沒有行號,因爲它們實際上沒有排序。當然,在現實世界中,行按照某種順序放置在硬盤上,但它不應該是任何意義。如果您需要訂購號碼,則需要將其列入專欄,或根據您的ORDER BY條款的具體情況。 – siride 2013-05-05 18:55:21

+0

我可能只是誤解了這個問題,但將LIMIT 1 OFFSET 3添加到現有SELECT中會出現什麼問題? 順便說一下,在這種情況下,「行號」是ORDER BY子句的工件。您似乎要求從查詢結果開始的一個項目偏移三位(或者可能是兩位,我不確定)。 – 2013-05-05 18:55:47

回答

1

如果你的ID是嚴格按照行號的增加,你可以做

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

我不知道你的意思是排序雖然。

邊注:您的代碼

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

着的工作,因爲這裏@pos對結果只設置,其中包括只有一個記錄的操作。

+0

有趣的是,它的工作原理.. :)它返回pos = 0的一條記錄 – Konservin 2013-05-05 19:53:23

+0

我的意思不是你的代碼根本不做任何事情。我的意思是它不會回來你想得到的數字3。但是看到你對Dany Y的回答感到滿意。所以我想你的問題解決了。 – luksch 2013-05-05 20:12:05

3

您可以使用此

Select rownum from (
SELECT @rownum:[email protected]+1 rownum, t.*FROM (SELECT @rownum:=0) r, table t order by tag) as t1 
where tag = 'C' 
+0

謝謝你Dany,這實際上似乎**完美**通過一些快速測試判斷。 'C'每次都是3。什麼讓我不把它作爲答案是S​​iride的評論..那裏可以有一些問題嗎? – Konservin 2013-05-05 19:06:14

+0

@Konservin:這裏本身沒有錯。這是爲特定結果集創建動態行數的有效方法。只要你沒有問題,那麼這是一個很好的答案(或者我建議添加一個持久排序的列)。但是,請注意,如果您在B和C之間插入任何行,則編號將隨此查詢而改變。 – siride 2013-05-05 19:16:23

+1

@Konservin進一步解釋,@siride是沒有查詢的行號,但是這裏發生的事情是,我們手動添加一個包含行號的列,並且我們爲每行添加一行'@rownum:= @ rownum + 1'並且調用這個列rownum。然後我們從包含行號(我們製作的) – 2013-05-05 21:10:42

0

其實,還有,我不認爲前一種可能性:

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

這似乎做同樣的事情,有點快了。還是我錯過了什麼?

+0

這張表中選擇與我的解決方案相同的解決方案,只是您現在依賴於標籤的排序。我以爲你想通過ID保持原來的秩序。 – luksch 2013-05-05 20:16:46

+0

是的,我現在看到..對不起,沒有更深入地查看你的答案。 +很多:) – Konservin 2013-05-05 20:23:56

+0

沒問題。正如我所說,我很高興你的問題似乎解決了。 – luksch 2013-05-05 21:26:22