2017-06-18 8 views
2

Ich versuche, ein Benutzerprofil aus einer MySql-Datenbank auszuwählen. Ich habe auch eine andere Tabelle, die das Telefon des Benutzers enthält, weil sie mehrere Telefone haben können. In der Telefontabelle habe ich ein Feld namens main, um anzuzeigen, dass es ein Hauptkontakt ist.MySql wählen Sie Wert, wenn die Übereinstimmung übereinstimmt oder wählen Sie zuerst, wenn nicht übereinstimmen

So kann ein Benutzer 3 Telefone (oder sogar mehr) haben, aber nur 1 kann das Haupttelefon sein. Wenn ich das Benutzerprofil auswähle, muss ich überprüfen, ob ein Telefon als Haupttelefon markiert ist, und dieses auswählen. Falls kein Telefon als main markiert ist, wähle ich das erste aus der Liste aus.

Dies ist mein Handy Tabelle:

id | id_user | main | phone 
15 | 23  | 0 | 99999999999 
16 | 23  | 1 | 88888888888 
17 | 27  | 0 | 66666666666 
18 | 27  | 0 | 77777777777 

So in dem obigen Beispiel würde ich muß beiden Benutzer auswählen (23 und 27), um die Benutzer 23 Bedürfnisse 88888888888 das Telefon hat und die Bedürfnisse Benutzer 27 das Telefon haben 66666666666.

Aber ich weiß nicht, wie dies zu erreichen, war ich ale nur das erste Register zu wählen, dies ist mein Code so weit:

SELECT 
    a.id, a.f_name, a.l_name, a.code, 
    ( 
     SELECT phone FROM tb_phone WHERE id_user = a.id ORDER BY id LIMIT 1 
    ) as 'phone' 
FROM tb_user a 
WHERE a.active = 1 

Antwort

3

Ihre Anfrage ist in der Nähe:

SELECT u.* 
     (SELECT p.phone 
     FROM tb_phone p 
     WHERE p.id_user = u.id 
     ORDER BY p.main DESC, p.id 
     LIMIT 1 
     ) as phone 
FROM tb_user u 
WHERE u.active = 1; 

Mit anderen Worten, Sie müssen p.main in die ORDER BY hinzufügen.

Darüber hinaus habe ich die Tabelle Aliase geändert, so dass sie Abkürzungen der Tabellennamen sind. Das macht die Abfrage viel einfacher zu folgen.

+0

Es ist lustig, wie es einfacher war als ich es gelernt habe. Danke für die Antwort! – celsomtrindade

Verwandte Themen