2010-05-24 6 views
15

Je cette requêteMysql jointure gauche Résultat nul

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

Fondamentalement, il retourne la liste des articles et le nom d'utilisateur que l'article est associé. Maintenant, s'il n'y a pas d'entrée dans la table users pour un ID utilisateur particulier, la variable users est NULL. Y at-il de toute façon à faire en sorte que si son null, il retourne quelque chose comme "Utilisateur introuvable"? ou devrais-je le faire en utilisant php?

Répondre

33

Utilisation:

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 

Documentation:

La raison de choisir COALESCE sur IF ou IFNULL est que COALESCE est la norme ANSI, alors que les autres méthodes ne sont pas implémenté de manière fiable sur d'autres bases de données. J'utiliserais CASE avant de regarder IF car CASE est la norme ANSI, ce qui facilite le portage de la requête vers d'autres bases de données.

+0

gota attendre 8 minutes pour accepter ...: P – Ozzy

1

Vous pouvez utiliser IF() dans Oracle où vous auriez utilisé le décodage.

Alors

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 

devrait fonctionner. Note: Je n'ai pas mysql à portée de main, donc je n'ai pas testé la requête. Mais devrait fonctionner avec des modifications mineures si elle échoue. Ne pas downvote;)

3

Vous pouvez utiliser la fonction IFNULL:

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

guillemets doubles sur l'utilisateur non trouvé? ;) –

+0

Non recommandé. :) –

Questions connexes