2017-10-23 3 views
0

Ich möchte zwei Tabellen kombinieren.Wie kann ich zwei Tabellen kombinieren und die Ergebnisse einer Tabelle gruppieren?

Tabelle list:

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

Tabelle animals:

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

Hier ist mein Ansatz:

$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); 

Das ist mein gewünschtes Ergebnis:

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

Aber das Ergebnis, das ich tatsächlich bekommen ist:

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

Antwort

1

Sie wollen die Tiere alle mit dem gleichen list_id verschmelzen daher müssen Sie Group by mit list_id verwenden. Group_concat() zeigt alle Ergebnisse für jede Gruppe an. Daher sollte die folgende Abfrage funktionieren:

$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); 

Hoffe es hilft!

+1

Es ist besser, wenn Sie einige Kommentare hinzufügen, wie Ihre Snippets das Problem von OP lösen, – Garf365

+1

Das funktioniert sehr gut! – Jarla

Verwandte Themen