2010-05-27 74 views
2

我正在使用MySQL。我有一張桌子這可以通過單個SQL查詢來完成

Type SubType 
1 1 
1 5 
1 6 
1 8 
2 2 
2 3 
3 1 
3 2 
3 3 

對於每種類型都有一些子類型。對於一個類型的每個子類型有在未來的類型相應的亞型:

(1,1) => (2,2) 
(1,5) => (2,3) 
(1,6) => (2,2) 
(1,8) => (2,3) 
(2,2) => (3,1) 
(2,3) => (3,2) 

如果你還沒有看到的模式,那就是:你當前和未來類型的亞型,在隨後進行排序下一個類型你在當前類型的當前子類型的相同位置獲得子類型。如果在當前類型中有更多的子類型在下一個子類型中,那麼您會在下一個類型中翹曲並從第一個子類型開始。

是否有可能構造一個查詢,該查詢採用當前類型和子類型,並在下一個類型中返回相應的子類型?

+0

你想亞型總是按升序排列? – 2010-05-27 23:52:17

+0

是的,子類型應該總是排序。將所有數據提供給客戶端並在那裏處理並不是一個可行的解決方案,因爲它太多了。 我已經實現了一個簡單的php解決方案,可以執行4個查詢。它的工作,但我雖然也許有一種方法可以避免不必要的來回發送數據。 – Ghostrider 2010-05-28 15:33:23

回答

0

不確定關於mysql ...在oracle中有LEAD和LAG函數,以及CONNECT BY。

我有點通過你的描述感到困惑我必須說:)

0

有可能是某種方式與查詢要做到這一點,但我認爲你會是一個更好的主意,建立一個數據結構該表然後在那裏做你的查找。我正在考慮的MySQL查詢將涉及從子查詢,模算術等獲得計數。最終結果將是一個混亂的查詢!相反,如果你有這樣的事情:

在簡陋的Python:

>>> x = [None, [1, 5, 6, 8], [2, 3], [1, 2, 3]] 
>>> for i in range(1,3): 
... for j in range(len(x[i])): 
...  k = j % len(x[i+1]) 
...  print(i,x[i][j],i+1,x[i+1][k]) 
... 
1 1 2 2 
1 5 2 3 
1 6 2 2 
1 8 2 3 
2 2 3 1 
2 3 3 2 
相關問題