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

私の質問は、日付の降順で並べられた 4 つのフィールドの 1 つで、今日以前の日付を持つすべてのコースを検索するためにどのクエリを使用できるかということです。したがって、クエリの上の私のデータベースでは、次のようになります。

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 に答える