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

How can I combine two tables and group the results of one table?

我想合并两个 table。

table list:

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

table 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     

您想要合并具有相同 list_id 的所有动物,因此您需要使用 Group bylist_idGroup_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);

希望对您有所帮助!