Wählen Sie mehrere Werte aus derselben Spalte aus. eine SQL-Anweisung

7

Ich möchte eine Liste der Benutzer aus einer Datenbank zurückgeben. Es gibt Hunderte von Benutzern in der Datenbank. Jeder Benutzer hat seine eigene eindeutige Benutzer-ID. Alle Werte, die ich zurückgeben möchte, befinden sich in derselben Spalte (meta_value).

Die Datenbankstruktur ist wie folgt:

id | user_id | meta_key | meta_value

Beispieldaten sind wie folgt:

1 | 3434 | Vorname | Brandon
2 | 3434 | Nachname | Johnson
3 | 3434 | street_add | 123 main
4 | 3434 | Stadt | Strand
5 | 3434 | Zustand | Texas

Ich versuche, den Vor- und Nachnamen, street_add, city und state in einer SQL-Anweisung zurückzugeben.

Ich möchte, dass die Ausgabe wie folgt aussieht:

Brandon, Johnson, 123 Main, Ocean Beach, Texas 
brandon-estrella-dev
quelle
Respektieren alle user_ids die gleiche Reihenfolge, zuerst kommt der Vorname als der Nachname und so weiter, sortiert nach ID? Sie könnten verwendenSELECT user_id,GROUP_CONCAT(meta_value ORDER BY id) FROM t GROUP BY user_id
Mihai
Wenn Sie "eine Abfrage" sagen, meinen Sie "eine Zeile"? Ein Beispiel für Ihre erwartete Ausgabe wäre hilfreich.
Michael Green
Michael Green - Ich möchte nur alle Datensätze in einer einzigen SQL-Anweisung zusammenfassen. Ich habe den Beitrag aktualisiert, um die gewünschte Ausgabe anzuzeigen. Ich möchte alle Benutzerinformationen aus der Datenbank in der Ausgabe wie oben
abrufen
Mihai - Die Spalte meta_value enthält mehr Datensätze als nur Vorname, Nachname, Adresse, Stadt, Bundesland und Postleitzahl. Dies sind jedoch die einzigen Rekorde, die ich ziehen möchte.
Brandon-Estrella-Dev
SELECT user_id,GROUP_CONCAT(meta_value ORDER BY id) FROM t WHERE meta_key IN('first_name','last_name',etc) GROUP BY user_id
Mihai

Antworten:

9

Verwenden Sie einfach GROUP_CONCAT mit einer WHERE-Bedingung

SELECT user_id,GROUP_CONCAT(meta_value ORDER BY id) 
FROM t 
WHERE meta_key  IN('first_name','last_name','street_add','city','state') 
GROUP BY user_id
Mihai
quelle