2017-10-23 12 views
0

2つのテーブルを結合したいと思います。2つのテーブルを結合して1つのテーブルの結果をグループ化するにはどうすればよいですか?

テーブル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); 

これは私の望ましい結果である:

私は実際に取得10

しかし、結果は次のとおりです。

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

答えて

1

あなたは、したがって、あなたがlist_idGroup 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); 

希望します。

+1

スニペットがOPの問題を解決する方法に関するコメントを追加すると良いです。 – Garf365

+1

これは非常にうまくいきます! – Jarla

関連する問題