Domanda

Ho due tabelle, una record di colpi, l'altra una tabella utente. Se come utente viene effettuato l'accesso, il hit viene registrato con l'ID di quell'utente. Se l'utente non viene effettuato, il hit viene registrato come user_id = 0

Quando eseguo un report, voglio unirmi ai successi contro la tabella degli utenti per ottenere il nome utente-ma non c'è nessun utente con l'ID 0, quindi ottengo i dati negativi (ad es. Nessun risultato per tutti i successi non universitari ). C'è un modo per selezionare un nome utente fittizio come "ospite" in cui la condizione di join non è soddisfatta?

Ecco la domanda:

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
È stato utile?

Soluzione

Prova a sinistra join e coalesce a default

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

Altri suggerimenti

Devi fare un join esterno sinistro; Ciò ti restituirà i record che hanno una voce user_id nella tabella HITS in cui l'utente non esiste nella tabella degli utenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top