0

我有一个 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

非常感谢您的帮助。

4

1 回答 1

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

在这里看小提琴。

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

于 2013-02-11T16:27:04.470 回答