2013-12-19 98 views
0

我有下面描述的表。列之間的MySQL搜索

-------------------------------------------------- 
| id | date_from | date_to | start_from stop_to 
-------------------------------------------------- 
    1 2013-10-12 2013-11-12 1  3 
    2 2013-09-08 2013-09-20 2  1 
    3 2013-06-04 2013-06-12 1  1 
    4 2013-05-02 2013-05-15 2  3 
    5 2013-04-11 2013-09-13 2  1 

的問題是,我無法弄清楚如何選擇我想要的格式中的日期和start_from和stop_from之間的數據。

比方說,我想和2013-01-01 2013-12-31之間尋找那裏start_from或stop_to是1

選擇的結果應該是

2013-10-12 1 
2013-09-20 1 
2013-06-04 1 
2013-06-12 1 
2013-09-13 1 

如果start_from或stop_to爲2的結果應該是

2013-09-08 2 
2013-05-02 2 
2013-04-11 2 

如果start_from或stop_to爲3的結果應該是

2013-11-12 3 
2013-05-15 3 

我希望你會得到邏輯

+0

請發佈您嘗試過的代碼。 – Kermit

+0

在您的查詢中使用兩個選擇的聯合 –

回答

1

你可以這樣說:

SELECT the_date,start_stop FROM (
    SELECT 
     id 
    , date_from as the_date 
    , start_from as start_stop 
    FROM my_table WHERE start_from=1 
     UNION ALL 
    SELECT 
     id 
    , date_to as the_date 
    , stop_to as start_stop 
    FROM my_table WHERE stop_to=1 
    ORDER BY id 
) tmp 

第一個查詢查找匹配start_from條件,並拉出date_from對那場比賽的行;第二個查詢查找匹配date_to條件的行,並將date_to拖入結果中。 UNION ALL運算符連接兩個查詢的結果。

這是demo on sqlfiddle

+0

這將起作用,但我需要保持上述日期的順序 – moemoe

+1

按ID添加訂單 –

+0

@moemoe您可以在內部查詢中按ID重新排序,然後擺脫外部查詢中的ID。 – dasblinkenlight