2010-05-24 16 views
15

Ich habe diese AbfrageMysql LEFT JOIN Null Ergebnis

SELECT articles.*, 
     users.username AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

Im Grunde ist es die Liste der Artikel und den Benutzernamen zurückgibt, dass der Artikel zu zugeordnet ist. Wenn jetzt in der Benutzertabelle für eine bestimmte Benutzer-ID kein Eintrag vorhanden ist, ist users var NULL. Gibt es trotzdem etwas, dass es, wenn es null ist, etwas wie "User Not Found" zurückgibt? Oder müsste ich das mit PHP machen?

Antwort

33

Verwendung:

SELECT a.*, 
      COALESCE(u.username, 'User Not Found') AS `user` 
    FROM ARTICLES a 
LEFT JOIN USERS u ON u.id = a.user_id 
ORDER BY articles.timestamp 

Dokumentation:

Der Grund COALESCE über zu wählen, ob oder IFNULL ist, dass COALESCE ist ANSI-Standard, während die anderen Methoden nicht sind zuverlässig über andere Datenbanken implementiert. Ich würde CASE verwenden, bevor ich wieder auf IF schauen würde - CASE ist ANSI-Standard, was es einfacher macht, die Abfrage in andere Datenbanken zu portieren.

+0

gota warten 8 Minuten zu akzeptieren ...: P – Ozzy

1

Sie können IF() verwenden, wo in Oracle Sie decode verwendet hätten.

SELECT articles.*, IF(users.username IS NULL, 'No user found', users.username) AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 

Sollte So arbeiten. Hinweis: Ich habe keine mysql handy, also habe ich die Abfrage nicht getestet. Aber sollte es mit kleinen Änderungen arbeiten, wenn es fehlschlägt. Sie nicht downvote;)

3

Sie verwenden, um die IFNULL Funktion:

SELECT articles.*, IFNULL(users.username, 'User Not Found') AS `user` 
FROM `articles` LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 
0

SELECT articles.*, 
     IFNULL(users.username,'User Not Found') AS `user` 
FROM `articles` 
LEFT JOIN `users` ON articles.user_id = users.id 
ORDER BY articles.timestamp 
+0

doppelte Anführungszeichen auf Benutzer nicht gefunden? ;) –

+0

Nicht empfohlen. :) –