Ich führe eine Abfrage für eine Tabelle, wo ich auch verwandte Informationen aus zwei verwandten Tabellen abrufen möchten, die beide viele zu eins relativ zu der primären Tabelle sind.MYSQL: LINKE VERBINDUNG in zwei Tabellen verwendet mit Group_Concatenate
Ich sende dann diese Informationen durch JSON zu einer App und aus diesem Grund bin Gruppe_concatening die mehreren Werte aus den anderen Tabellen. Es funktioniert gut mit einem zusätzlichen Tisch. Wenn ich jedoch eine zweite Tabelle hinzufüge, erhalte ich alle Nebenprodukte der beiden zusätzlichen Tabellen, die ich nicht haben möchte.
Kann jemand vorschlagen, wie man nur einzigartige Werte für die verbundenen Felder erhält?
//current sql
$sql = SELECT c.*,group_concat(p.name) as `names`,
group_concat(l.location) as `locations`
FROM companies `c`
LEFT JOIN people `p`
ON p.companyid = c.id
LEFT JOIN locations `l`
ON l.companyid = c.id
GROUP by c.id;
Der Ausgang grundsätzlich multiplext Namen Werte für jeden Namen nach Ort zu wiederholen, was ich nicht kümmern (und tut das gleiche für Standorte).
Statt
"names":"John,Joe,Jim,Tom,Bob","locations":"Tokyo,London,Manila,Paris,Milan",
die Ausgabe "names";"John,John,John,John,John,Joe,Joe,Joe,Joe,Joe,...etc.
Vielen Dank für alle Vorschläge auf richtigem Weg, dies zu tun. Edit: Beispieldaten
Companies
id|company|
1|IBM
2|Google
3|Apple
4|Amazon
People
id|name|companyid
1|John|1
2|John|2
3|Jim|3
4|Bob|4
5|Tom|4
Locations
id|name|companyid
1|London|1
2|Cupertino|3
3|Seattle|3
Desired output:
company:IBM, people:John, location:London
company:Google, people: John location: null
company:Apple, people:Jim location: Cupertino
copany:Amazon, people:Bob,Tom location:Seattle
Sie können mit GROUP_CONCAT DISTINCT verwenden Duplikate zu beseitigen, aber nicht ganz sicher, das ist, was Sie wollen. Normalerweise, wenn ich etwas benötigt habe, ist es, weil ich eine Liste von gepaarten Werten brauche. In diesem Fall habe ich CONCAT() für die 2 Felder verwendet und dann GROUP_CONCAT für die resultierenden Werte. – Kickstart
Wenn Sie uns Beispiel-Eingabedaten zeigen, die die unerwünschten doppelten Namen erzeugen würden, die hilfreich wären. –
Distinct könnte es aber tun, wenn es wirklich zwei Leute gibt, die in einer Firma John heißen, oder zwei Locations namens Green Acres, ich will beides. Grundsätzlich möchte ich einzigartige Menschen und einzigartige Standorte für jedes Unternehmen. – zztop