2017-08-08 29 views
1

假設我有一個數據庫表,其中有很多行我想要顯示給用戶。限制輸出並製作頁面是有意義的。在MySQL我這樣做:如何在MySQL中使用LIMIT時輕鬆獲取行號?

SELECT * FROM myTable ORDER BY myValue LIMIT 120,10 

這將顯示10行從120行開始那麼MySQL必須使用,在內部,某種秩序,並相應編號的行。我想顯示每行的行號。如何僅使用MySQL訪問這些數字?要清楚,我正在尋找這樣的東西:

SELECT *,<LIMIT_ROWNO> FROM myTable ORDER BY myValue LIMIT 120,10 

我看了網上和手冊,但我找不到它。我更喜歡簡單的東西,而不使用變量或函數。沒有預定義的表達式嗎?

我可以很容易地在PHP中解決這個問題,但從MySQL獲取行號更合乎邏輯。

+1

沒有默認順序。結果是隨機的或更好的術語是不可取的。 –

+0

你可以嘗試使用變量.. –

+0

@juergen d:在我的例子中,我沒有指定'ORDER BY',因爲它不是必需的。即使訂單是隨機的,問題仍然有效。 –

回答

4

你不能做到這一點,而不使用變量,例如:

SELECT m.*, @rownum := @rownum + 1 as `num` 
FROM myTable m, (SELECT @rownum := 120) a 
ORDER BY myValue LIMIT 120,10; 
+0

超級喜歡的人.. !! –

+0

是的,我可以看到這是如何工作的。在相同的查詢中隱藏'rownum'的初始化是一個'很好'的接觸。最後,我選擇在PHP中實現它。我已經有了一個複雜的查詢,這使得它更加醜陋。無論如何,你確認我懷疑我無法直接從MySQL獲取行號。 –

2
set @rownum=120; 
SELECT *,@rownum:[email protected]+1 as rn FROM myTable ORDER BY myValue LIMIT 120,10; 
+0

請更正您的答案,使'rownum'開始於LIMIT開始的地方。 –

+0

我改正了,親愛的 –