我有一个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
非常感谢你的帮助。
答案 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。