2013-12-19 62 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