Pregunta

Tengo dos tablas, una de un registro de éxitos, la otra una tabla de usuario. Si se registra el usuario, el HIT se registra con la ID de ese usuario. Si el usuario no está iniciado, el hit se registra como user_id = 0

Cuando ejecuto un informe, quiero unirme a los éxitos contra la tabla de usuarios para obtener el nombre de usuario, pero no hay usuario con el ID 0, por lo que obtengo los datos malos (por ejemplo, no hay resultados para todos los no registrados en los éxitos ). ¿Hay alguna forma de seleccionar un nombre de usuario ficticio como "invitado" donde no se cumple la condición de unión?

Aquí está la consulta:

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
¿Fue útil?

Solución

Pruebe a la izquierda unirse y fusionar al incumplimiento

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

Otros consejos

Necesitas hacer una unión externa izquierda; Eso le devolverá los registros que tienen una entrada user_id en la tabla HITS donde el usuario no existe en la tabla de usuarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top