如何组合两个表并将一个表的结果分组?

时间:2017-10-23 14:32:02

标签: mysql left-join group-concat

我想结合两张桌子。

list

| id   | day         | 
|:-----|------------:|
| 1    | monday      |   
|      |             |   
|      |             | 
|:-----|------------:| 
| 2    | tuesday     |   
|      |             |   

animals

| id   | animal      | list_id    |
|:-----|------------:|:----------:|
| 1    | cat         |      1     | 
|:-----|------------:|:----------:|  
| 2    | bird        |      1     | 
|:-----|------------:|:----------:| 
| 3    | monkey      |      1     | 
|:-----|------------:|:----------:| 
| 4    | frog        |      2     | 
|:-----|------------:|:----------:| 
| 5    | dog         |      2     | 
|:-----|------------:|:----------:| 

这是我的方法:

$animals = $db->query('SELECT *,
     GROUP_CONCAT(animals.animal SEPARATOR " <br> ") AS animals
     FROM list 
     LEFT JOIN animals ON list.id=animals.list_id
')->fetchAll(PDO::FETCH_ASSOC);

这是我想要的结果:

| id   | day         | animal       |
|:-----|------------:|:------------:|
| 1    | monday      |     cat      |    
|      |             |     bird     | 
|      |             |     monkey   |
|:-----|------------:|:------------:|  
| 2    | tuesday     |     frog    
|      |             |     dog     

但我实际得到的结果是:

| id   | day         | animal       |
|:-----|------------:|:------------:|
| 1    | monday      |     cat      |    
|      |             |     bird     | 
|      |             |     monkey   |
|      |             |     frog    
|      |             |     dog     

1 个答案:

答案 0 :(得分:1)

您想要将所有动物与list_id合并,因此您需要将Group bylist_id一起使用。 Group_concat()将汇总每个组的所有结果。因此,以下查询应该有效:

$animals = $db->query('SELECT l.*,
     GROUP_CONCAT(animals.animal SEPARATOR " <br> ") AS animals
     FROM list l
     LEFT JOIN animals ON list.id=animals.list_id
     group by animals.list_id    // Added statement
')->fetchAll(PDO::FETCH_ASSOC);

希望它有所帮助!