2012-09-18 25 views
0

我已經在一個表tbl以下幾列:的MySQL從同一個表中選擇當前和以前的專欄

OrderID:  Parent:  Child: 
    1    1   1 
    2    2   1 
    3    1   2 
    4    1   1 
    5    2   1 

我想獲得的電流(OrderIDParentChild)和LOWER (OrderID,Parent,Child) WHERE親子等於當前的OrderID的Parent和Child。

因此,舉例來說,如果我有OrderID=4結果應該是一個查詢如下:

OrderID: Parent: Child: 
4   1   1 
1   1   1 

if OrderID=5

OrderID: Parent: Child: 
5   2   1 
2   2   1 

BTW,我可以做到這一點在PHP,但我想在單個查詢中執行。

+0

這是一個錯字。我剛剛更新了我的問題。 –

+0

如果要求訂單3,會發生什麼情況?如果有兩場比賽會發生什麼? –

+0

只能顯示一個LOWER OrderID。如果沒有LOWER OrderID,那麼只顯示當前的OrderID。 –

回答

0

好的,謝謝你的回覆,但我有我自己的答案。

SELECT a.OrderID,a.Parent,a.Child FROM tbl a 
JOIN (SELECT OrderID,Parent,Child FROM tbl WHERE OrderID={$OrderID}) b 
ON a.Parent=b.Parent 
AND a.Child=b.Child 
WHERE a.OrderId<=b.OrderID 
ORDER BY OrderID 
DESC LIMIT 2 
0

這將這樣的伎倆:

SELECT * 
FROM tbl 
WHERE Parent = (SELECT Parent FROM tbl WHERE OrderID = 4) 
    AND Child = (SELECT Child FROM tbl WHERE OrderID = 4) 

而且PHP內取行到一個數組,搜索您的訂單ID,並得到其前一個。

0
SELECT * FROM FROM Orders WHERE OrderID = 4 
UNION ALL 
SELECT * FROM FROM Orders WHERE Parent = 4 ORDER BY OrderID DESC Limit 1 

此外,如果你有時間看看我的這個答案會給你一個很好的示範。

Finding free blocks of time in mysql and php?

0
SELECT * FROM FROM Orders WHERE OrderID = @orderId 
UNION ALL 
SELECT * FROM FROM Orders WHERE Parent = @orderId 
0

你可以做這樣的事情:

(SELECT OrderID, Parent, Child 
FROM tbl 
WHERE OrderID = 4) 
UNION 
(SELECT OrderID, Parent, Child 
FROM tbl 
WHERE Parent = (SELECT Parent FROM tbl WHERE OrderID = 4) 
    AND Child = (SELECT Child FROM tbl WHERE OrderID = 4) 
ORDER BY OrderID ASC LIMIT 1) 

我不知道這樣做的性能雖然...

0

這對我的作品。

select B.* from 
    (select A.Parent,A.Child from `tbl` A 
    where A.OrderID = 4) C 
    inner join `tbl` B 
on C.Parent = B.Parent 
and C.Child = B.Child 
order by B.OrderID desc 
相關問題