2012-10-30 128 views
0

我有类似下面的一组MySQL的数据:返回从一行多个结果

| id | type  | start    | end     | 
=============================================================== 
| 1 |  event | 2011-11-01T00:00:00 | 2012-01-02T00:00:00 | 
| 2 | showing | 2012-11-04T00:00:00 | 2012-11-04T00:00:00 | 
| 3 | conference | 2012-12-01T00:00:00 | 2012-12-04T00:00:00 | 
| 4 |  event2 | 2012-01-01T00:00:00 | 2012-01-01T00:00:00 | 

我想要检索某一日期范围内的事件,但我也想回到各自的结果为每行时间跨度超过一天。达到此目的的最佳方式是什么?

编辑:换句话说,我想回到从事件排两个结果,从会议行和所有其他单个结果四个结果。

任何想法将不胜感激。

+1

你在使用的时刻访问MySQL数据,如果不是PHP? – Andrew

+0

是否将开始/结束字段更改为Unix时间戳的可能性? – saadlulu

+2

如果您想要返回2个不同条件下具有相同列的结果集,请在UNION上执行UNION或使用UNION ALL。或者使用OR表达式。 – NoChance

回答

1

尝试着这样一句话:

SELECT * FROM table 
WHERE START BETWEEN '2012-01-01' AND '2012-01-03' 
OR END BETWEEN '2012-01-01' AND '2012-01-03'  
OR TO_DAYS(end) - TO_DAYS(start) > 1 

我已经创造了它的测试上SQL Fiddle

+0

user714965,这给了我一个日期范围的结果,但在你的例子中,我将寻找返回3个结果的事件,4个结果来回会议和1个结果显示。我想在单个查询中执行此操作。如果工会是必要的,我很想看看它是如何完成的,但我也想知道是否有更好的方法。 任何帮助将不胜感激。 –