我有下面描述的表格。
--------------------------------------------------
| 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
希望你能明白逻辑
最佳答案
你可以这样做:
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 .
关于MySQL 列间搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20687423/