2017-04-26 54 views
0

我正在嘗試做一些應該相對比較明智的事情,我想,但是我無法將其包圍。查找具有一定數值的行,然後選擇下一行X行

我想在表中找到某個id,然後選擇符合特定條件的下一個X行。

示例表:

+++++++++++++++++++++++++++++++ 
| id | type | value | sorting | 
+++++++++++++++++++++++++++++++ 
|1 | 'x' | 'foo' | 1  | 
|2 | 'y' | 'bar' | 5  | 
|3 | 'z' | 'foo2'| 9  | 
|4 | 'z' | 'bar2'| 29  | 
|5 | 'x' | 'foo3'| 3  | 
|6 | 'z' | 'bar3'| 11  | 
|7 | 'z' | 'foo4'| 4  | 
+++++++++++++++++++++++++++++++ 

我要的是選擇下一個X行,其中type = 'z'從行開始與id = 3,由sorting排序。

因此,對於這張表,我想要按順序獲得編號爲3, 6, 4的行。請注意,編號爲7的行與類型匹配,但它的值爲sorting,值低於編號爲3的行。

這可以在一個查詢中完成嗎?


我的想法:爲示例表,一些因爲這樣會做: SELECT * FROM table WHERE type = 'z' AND sorting > 9 ORDER BY sorting LIMIT 3, X

但很明顯,我不知道該值9,但偏移,所以我需要一種方法到:

  1. 查找編號爲3的排序值。
  2. 找到ID爲3的偏移量。
  3. 將這些應用於查詢。

編輯:我在哪裏現在:

SELECT 
* 
FROM table 
WHERE type = 'z' AND sorting > (SELECT sorting FROM table WHERE id = 3) 
ORDER BY sorting 
LIMIT 0, 25 

所以最後一步就是要偏移的3並傳遞作爲第一個參數來限制。

+0

那你試試這麼遠嗎? – Alex

+0

加入問題! – Rein

+0

'限制3,X'做喲需要2? 3?無窮?返回的記錄數量? * 2。找到id 3的偏移量。* - 爲什麼你需要找到偏移量? – Alex

回答

0

你的目標仍然不明確。但這裏是我的嘗試:

http://sqlfiddle.com/#!9/2d389/1

SELECT t1.* 
FROM foobar t1 
JOIN (SELECT * 
     FROM foobar 
     WHERE id=3 
) t2 
ON t1.id >= t2.id 
    AND t1.type = t2.type 
    AND t1.sorting >= t2.sorting 
ORDER BY sorting 
LIMIT 10 
+0

試圖訪問小提琴,但它不會加載:-( – Rein

+0

只是重試,有時站點有點超載,但你應該最終得到它,而且查詢本身很容易測試在你身邊 – Alex

+0

它的工作!太棒了。你可以詳細說明't1'和't2'的含義嗎? – Rein

相關問題