Zwei rows im gleichen statement auslesen

Board zum Thema mySQL
Antworten
roli_bhp
Beiträge: 2
Registriert: 10. Februar 2010, 13:40

Zwei rows im gleichen statement auslesen

Beitrag von roli_bhp » 10. Februar 2010, 14:13

Hallo zusammen

ich habe eine Frage:
Ich habe zwei Tabellen "USERS" und "CONTACT".

Die USER tabelle sieht so aus

Code: Alles auswählen

USER_ID | NAME | VORNAME
1 | Müller | Rudolf
2 | Schwager | Jürg

Die CONTACT tabelle sieht so aus

Code: Alles auswählen

USER_ID | FIELD_DESC | FIELD_VALUE
1 | Phone1 | 1234567
1 | Phone2 | 0987654
2 | Phone1 | 5678944
2 | Phone2 | 3647594
Nun möchte ich die Ausgabe wie folgt gestalten

Name | Vorname | Phone 1 | Phone 2

wie schreibe ich nun das select statement, dass ich quasi zwei rows im gleichen SQL statement abarbeiten kann.

Select

A.Name as Name ,A.Vorname as Vorname, B.FIELD_VALUE as PHONE1, B.FIELD_VALUE as PHONE2 from USERS A join CONTACT B on A.USER_ID=B.USER_ID where ....

nun wie definiere ich aber, dass ich unter B.FIELD_VALUE einmal den Wert für Phone 1 bekomme und einmal den Wert für Phone 2 ? Wenn ich eine where klausel mache, klappt dies wenn ich nur eine telnummer definiere, also where B.FIELD_DESC ='Phone1', jedoch bei zwei Zeilen geht dies logischerweise nicht mehr. doch wie kann ich es dann lösen ?

vielen dank für die hilfe
roland

Benutzeravatar
Powie
Administrator
Beiträge: 7454
Registriert: 4. März 2003, 09:32
Wohnort: Ilmtal
Kontaktdaten:

Zwei rows im gleichen statement auslesen

Beitrag von Powie » 10. Februar 2010, 14:57

Select u.name, u.vorname, a.field_value, b.field_value
From users u
Left Join CONTACT a on a.user_id = u.user_id and a.field_desc = 'Phone1'
Left Join CONTACT b on b.user_id = u.user_id and a.field_desc = 'Phone2'
*Never say Never* - [ Dropbox | Webspace ]

roli_bhp
Beiträge: 2
Registriert: 10. Februar 2010, 13:40

Zwei rows im gleichen statement auslesen

Beitrag von roli_bhp » 10. Februar 2010, 19:39

Vielen Dank Powie, klappt bestens!

raiser
Beiträge: 476
Registriert: 20. April 2002, 15:31
Kontaktdaten:

Zwei rows im gleichen statement auslesen

Beitrag von raiser » 17. Februar 2010, 12:05

Ähm, wenn man so ein Ergebnis hat - stimmt irgendwas nicht mit dem DB-Design.

Warum gibt es eine Tabelle "Kontakt" - doch nur, wenn ein "Ding" mehrere "Kontakte" hat.
oder....
Wenn sich meherere Dinger einen Kontakt teilen.
In diesem Fall ist aber die Telefonnummer(n) einem bestimmten Ding zugeteilt. Aus diesem Grund ergibt es keinen Sinn .. eine 1:1 in eine extra Tabelle zu werfen.

Sry, wenn ich ältere Leichen wecken muss - aber wenn man schon anfängt, sich mit DB-design und deren Abfragegestalltung auseinander zu setzen,
dann auch gleich richtig. Also wenigstens bis zur 3.NF sollte eine DB schon erstellt werden - alles darüber ist IMO wissenschaftliche Krümelkacke.


lG Henrik
Wissen ist das einzige Gut, dass sich vermehrt, wenn man es teilt! (Marie von Ebner-Eschenbach)

Irren ist menschlich!

Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!

Kameradschaft ist, wenn der
Kamerad schafft !!!!

Antworten