Frezl
Erfahrenes Mitglied
Hallo allerseits,
ich versuche gerade eine SELECT-Abfrage zusammenzubauen, bei der sowohl aus einer Haupt-Tabelle als auch aus einer mit ihr verknüpften Tabelle Werte ausgelesen werden. Es handelt sich um eine n:m-Verknüpfung, die über eine Verknüpfungstabelle abgebildet wird. Das ganze sieht dann so aus:
Das Ergebnis soll neben einigen anderen Feldern zu jedem item alle verknüpften Personen enthalten. Das Ergebnis könnte dann z. B. so aussehen:
Ich habe schlussendlich folgendes Konstrukt aus Joins zusammengestrickt:
Das liefert mir im Prinzip auch die Informationen, die ich haben will, allerdings nicht in de gewünschten verschachtelten Struktur. Stattdessen wird für jede Person, mit der das Item verknüpft ist, eine neue Zeile angelegt. Also so:
Ist es überhaupt möglich, mit mySQL verschachtelte Ergebnisse zu erzeugen? Wenn nicht, wie würdet ihr Das Ergebnis bearbeiten, um die gewünschte Struktur zu erreichen. Das ganze sollte möglichst performant bleiben, deshalb will ich Array-Durchläufe mit Schleifen wenn möglich verhindern....
Viele Grüße
Frezl
EDIT:
Das Hinzufügen von
führt dazu, dass die Items nicht mehr mehrfach auftauchen. Leider wird dann aber nur noch eine Person zu jedem Item ausgegeben. Also auch nicht das, was ich suche :-/
ich versuche gerade eine SELECT-Abfrage zusammenzubauen, bei der sowohl aus einer Haupt-Tabelle als auch aus einer mit ihr verknüpften Tabelle Werte ausgelesen werden. Es handelt sich um eine n:m-Verknüpfung, die über eine Verknüpfungstabelle abgebildet wird. Das ganze sieht dann so aus:
Code:
items_persons_rel:
| items_id | persons_id |
items:
| id | name | description | ...
persons:
| id | name | ...
Das Ergebnis soll neben einigen anderen Feldern zu jedem item alle verknüpften Personen enthalten. Das Ergebnis könnte dann z. B. so aussehen:
PHP:
$result = array (
id => 2,
name => Ein Item,
description => Das kann das Item,
related_persons => array (
id => 4,
name => Einfach Kurt
)
);
Ich habe schlussendlich folgendes Konstrukt aus Joins zusammengestrickt:
Code:
SELECT
`items`.`id` as `id`,
`items`.`name`,
`persons`.`id` as `persons_id`,
`persons`.`first_name`
FROM
`items`
LEFT JOIN
`items_persons_rel`
ON
`items_persons_rel`.`items_id` = `items`.`id`
LEFT JOIN
`persons`
ON
`persons`.`id` = `items_persons_rel`.`persons_id`
ORDER BY
`items`.`id`
DESC
Code:
Array
(
[0] => Array
(
[id] => 61
[name] => No relations
[description] => dieses und jenes
[persons_id] =>
[name] =>
)
[1] => Array
(
[id] => 56
[name] => Testbeitrag mit 2 related persons
[description] => Etwas anderes
[persons_id] => 1
[first_name] => Martin
)
[2] => Array
(
[id] => 56
[name] => Testbeitrag mit 2 related persons
[description] => Etwas anderes
[persons_id] => 4
[name] => Max
)
)
Ist es überhaupt möglich, mit mySQL verschachtelte Ergebnisse zu erzeugen? Wenn nicht, wie würdet ihr Das Ergebnis bearbeiten, um die gewünschte Struktur zu erreichen. Das ganze sollte möglichst performant bleiben, deshalb will ich Array-Durchläufe mit Schleifen wenn möglich verhindern....
Viele Grüße
Frezl
EDIT:
Das Hinzufügen von
Code:
GROUP BY
`items`.`id`
Zuletzt bearbeitet: