mysql sélectionne un enregistrement factice lorsque la condition JOIN n'est pas remplie

StackOverflow https://stackoverflow.com/questions/6362132

  •  28-10-2019
  •  | 
  •  

Question

J'ai deux tables, l'une un enregistrement des hits, l'autre une table utilisateur.Si l'utilisateur est connecté, l'appel est enregistré avec l'ID de cet utilisateur.Si l'utilisateur n'est pas connecté, l'appel est enregistré en tant que user_id = 0

Lorsque j'exécute un rapport, je veux JOIN les hits contre la table users pour obtenir le nom d'utilisateur - mais il n'y a pas d'utilisateur avec l'ID 0, donc je récupère de mauvaises données (par exemple, aucun résultat pour tous les non-connecté hits).Existe-t-il un moyen de sélectionner un nom d'utilisateur factice comme "Invité" où la condition JOIN n'est pas remplie?

Voici la requête:

SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id, b.username
FROM hits a
JOIN users b ON a.user_id = b.id
WHERE 1
Était-ce utile?

La solution

Essayez la jointure gauche et COALESCE par défaut

SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id,
  COALESCE( b.username, 'GUEST')
FROM hits a
LEFT JOIN USERS b ON a.user_id = b.id

Autres conseils

Vous devez faire une JOINTURE EXTERNE GAUCHE;qui vous renverra les enregistrements qui ont une entrée user_id dans la table des hits où l'utilisateur n'existe pas dans la table des utilisateurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top