2013-02-11 102 views
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 

非常感謝您的幫助。

+1

你能夠正常化這個表嗎? – Kermit 2013-02-11 16:24:03

+0

@njk我繼承了這一點,並同意規範化是明智的長期解決方案,但(像往常一樣)我被要求儘快做出一些事情,所以想知道是否有人可以在此期間提供幫助。 – 2013-02-11 16:29:06

回答

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。

+1

你可能想要一個'UNION ALL',這樣任何重複的東西都不會被刪除。 – Taryn 2013-02-11 16:29:42

+0

@bluefeet是的我不確定在這種情況下最好使用UNION ALL還是隻使用UNION ...我將編輯我的答案,謝謝 – fthiella 2013-02-11 16:31:53

+0

@fthiella感謝此 - 完美工作,我不知道SQL小提琴所以一個偉大的獎金! – 2013-02-11 23:14:14