如何合并两个表并将一个表的结果分组?
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 by
与list_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 将两个表合并为一个?