Variablen in MySQL-Abfrage

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variablen in MySQL-Abfrage

    Hi,

    ich habe ein Problem.
    Ich habe eine Tabelle, in der einige Userdaten stehen. (Name, Vorname, Geburtsdatum, Anrede usw.)
    Dann habe ich eine zweite Tabelle in der Telefonnummern stehen. Dort ist die Nummer und der Typ verzeichnet. Es gibt die Typen F (Fax), T (Tel) und M (Mobil).

    Ich scheitere daran, dass ich in einer (einzigen) Abfrage alle Daten zu einem Nutzer bekomme. Dazu benötige ich unter Umständen Variablen, weil eine Person ja mehrere Telefonnummern haben kann, also eine mobile und eine Telefonnummer zum Beispiel.
    Als Ergebnis möchte ich also eine Zuordnung, in der der Nutzer und seine Nummern stehen.

    Ist das mit reinem SQL machbar? Hat jemand eine Idee?

    Danke im Voraus
  • Ich habe mittlerweile eine brauchbares Ergebnis gefunden.

    Man kann als Spalte auch eine Unterabfrage nutzen. Dabei muss man darauf achten, dass dies nur funktioniert, falls es eine einzige Ergebniszeile gibt.
    Ansonsten muss man die Ergebnisse Gruppieren (eventuell Datenverlust).

    Hier mal eine Beispielabfrage:

    Quellcode

    1. SELECT p.firstname, p.lastname, p.id AS userID,
    2. (SELECT t.number
    3. FROM telephones t
    4. WHERE t.type = 'T'
    5. AND t.user_id = userID
    6. GROUP BY t.user_id)
    7. FROM person p, telephones tel
    8. WHERE p.id = tel.user_id
    9. GROUP BY p.id


    Vielleicht hilft es ja jemandem, mir auf jeden Fall :)
  • Versuchs mal mit GROUP_CONCAT

    Diese Funktion gibt einen String als Ergebnis zurück. Dieser gibt die verketteten Nicht-NULL-Werte einer Gruppe zurück. NULL wird zurückgegeben, wenn keine Nicht-NULL-Werte vorhanden sind. Die vollständige Syntax sieht wie folgt aus:

    siehe dev.mysql.com/doc/refman/5.1/de/group-by-functions.html

    Quellcode

    1. SELECT p.firstname,
    2. p.lastname,
    3. p.id AS userID,
    4. GROUP_CONCAT(t.number) AS telnumbers
    5. FROM person p
    6. INNER JOIN telephones tel
    7. ON p.id = tel.user_id
    8. INNER JOIN telephones t
    9. ON t.user_id = p.ID
    10. AND t.type = 'T'
    11. GROUP BY p.id
    Alles anzeigen
  • Dann muss ich am Ende nur noch die Telefonnummern auseinander nehmen, also vom Komma trennen, richtig?

    Vielleicht noch eine kleine Ergänzung, in der man den Separator einstellen kann, denn das war mein erster Gedanke, als ich das Ergebnis sah (Kann man den Separator ändern?)

    zum Beispiel ein Semikolon als Separator:

    Quellcode

    1. SELECT p.firstname, p.lastname, p.id AS userID, GROUP_CONCAT( t.number
    2. SEPARATOR ' ; ' ) AS telnumbers
    3. FROM person p
    4. INNER JOIN telephones tel ON p.id = tel.entity_id
    5. INNER JOIN telephones t ON t.entity_id = p.ID
    6. AND t.type = 'T'
    7. GROUP BY p.id


    Es scheint zu funktionieren.

    Danke dir!