SQLクエリに問題があり、返される結果セットが期待したものではありません。
私が関連付けようとしているこれらの3つのテーブルがあります。
events_detail
__________________
| ID | start_date |
| 1 | 2012-08-09 |
| 2 | 2013-02-13 |
| 3 | 2012-12-12 |
| 4 | 2013-01-21 |
| 5 | 2012-12-25 |
-------------------
ここで、IDは主キーです
events_category_relationship
__________________________
| ID | event_id | cat_id |
| 1 | 1 | 1 |
| 2 | 2 | 4 |
| 3 | 3 | 2 |
| 4 | 4 | 2 |
| 5 | 5 | 3 |
--------------------------
ここで、IDは主キーです
events_category_detail
__________________________________
| ID | name | description |
| 1 | Europe | Kings and castles! |
| 2 | USA | Freedoms |
| 3 | China | Made in China |
| 4 | UK | Big Brother |
------------------------------------
ここで、IDは主キーです
私がする必要があるのは、各カテゴリから1つのイベントのみを取得し、最も早い出現の日付でソートすることです。したがって、結果に期待する必要があるのは次のとおりです。
結果セット
________________________________________________________________
| e_id | start_date | c_id | category_name | category_desc |
| 1 | 2012-08-09 | 1 | Europe | Kings and castles! |
| 3 | 2012-12-12 | 2 | USA | Freedoms |
| 5 | 2012-12-25 | 3 | China | Made in China |
| 2 | 2013-02-13 | 4 | UK | Big Brother |
-----------------------------------------------------------------
私が試したSQLクエリは次のようになります
SELECT e.id, e.start_date, c.category_name, c.category_desc
FROM events_detail e
JOIN events_category_relationship r ON r.event_id = e.id
JOIN events_category_detail c ON c.id = r.cat_id
ORDER BY date(e.start_date)
これは3つのテーブルを結合し、日付順に結果を返します。私がこだわっているのは、上記の目的の結果セットのように、各カテゴリの1つだけが表示されるようにすることです。DISTINCTc.category_nameとGROUPBYc.category_nameを使用してみましたが、いずれも機能しません。
どんな助けやアドバイスも大歓迎です。