SQL查询语句表连接

时间:2013-03-04 18:26:38

标签: php mysql sql

我遇到SQL查询问题,返回的结果集不是我的预期。

我试图将这三个表格联系起来。

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是主键

我需要做的是每个类别只抓一个事件,并按照最早出现的日期排序。所以我在结果中应该期待以下

结果集

________________________________________________________________
| 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个表并按日期顺序返回结果。我坚持的是使它只显示每个类别中的一个类似上面所需的结果集。我尝试过使用DISTINCT c.category_name和GROUP BY c.category_name,但它们都不起作用。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

您需要使用子查询来获取每个min(start_date)name的{​​{1}}。然后,您将使用此结果连接回description表,以获得与子查询中的数据相关联的events_details

id

请参阅SQL Fiddle with Demo