查询基于多个日期列和排序结果的选择

时间:2013-02-11 16:22:46

标签: mysql

我有一个MYSQL数据库,其中包含以下字段(简化为显示问题):

id | courseID | date1      | date2      | date 3     | date 4 
-----------------------------------------------------------------
1  | 10       | 2013-01-01 | 2013-02-05 | 0000-00-00 | 0000-00-00
2  | 23       | 2013-03-02 | 2013-05-04 | 2013-07-05 | 0000-00-00
3  | 35       | 2013-02-01 | 0000-00-00 | 0000-00-00 | 0000-00-00

我的问题是,在日期降序排序的四个字段之一中,我可以使用什么查询来查找日期小于或等于今天的所有课程。所以对于我上面的数据库,查询会给我:

id  | courseID | date
---------------------------
1   | 10       | 2013-02-05
3   | 35       | 2013-02-01
1   | 10       | 2013-01-01

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

如果无法规范化表格,可以使用UNION查询,如下所示:

SELECT id, courseID, date1 date
FROM yourtable
WHERE date1>'0000-00-00' and date1<=curdate()
UNION
SELECT id, courseID, date2 date
FROM yourtable
WHERE date2>'0000-00-00' and date2<=curdate()
UNION
SELECT id, courseID, date3 date
FROM yourtable
WHERE date3>'0000-00-00' and date3<=curdate()
UNION
SELECT id, courseID, date4 date
FROM yourtable
WHERE date4>'0000-00-00' and date4<=curdate()
ORDER BY date

请参阅小提琴here

由于我使用的是UNION,因此将删除所有重复项。如果您不想删除重复项,则可以使用UNION ALL。