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

Posted

技术标签:

【中文标题】如何合并两个表并将一个表的结果分组?【英文标题】:How can I combine two tables and group the results of one table? 【发布时间】:2018-04-04 03:42:43 【问题描述】:

我想合并两张表。

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】:

您想将所有具有相同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);

希望对你有帮助!

【讨论】:

如果你添加一些关于你的sn-ps如何解决OP问题的cmets会更好,

以上是关于如何合并两个表并将一个表的结果分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 innerJoinAndSelect 将两个表合并为一个?

如何从两个不同的、不相关的表中获取最新的行,并将它们合并到一个结果集中?

如何连接两个表中的数据并将结果插入到新表中?

合并两个有序链表【递归、迭代】

sql数据库中的两个表的记录进行比较!并将结果写入表中!

尝试合并 SQL 查询的两个结果 - ToDoList App