Devuelve el resultado predeterminado para el valor IN independientemente
Tengo una consulta que incluye a todos los usuarios que han estado en línea entre un determinado rango de fechas. Esto se hace mediante una consulta IN debido a cómo quiero mostrar los datos. Sin embargo, me gustaría devolver un valor predeterminado si no se encontraron registros para una ID analizada en la condición IN.
Consulta simplificada:
SELECT users.Name, users.ID, SUM(users.Minutes) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
Ahora la consulta anterior solo incluirá aquellas filas que cumplan con la condición, como se esperaba. También me gustaría que la consulta obtenga un valor predeterminado para las ID dentro de la condición IN que no cumplen con la condición.
El uso IFNULL
en este caso no funcionará ya que el registro nunca se devuelve
SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)
Para su información, estoy analizando esta consulta en una función PDO personalizada. No estoy usando funciones de MySQL en desuso
Tiene una condición en OnlineUseage
la unión izquierda que se vuelve como una unión interna.
mover su condición a la from
cláusula será mejor:
SELECT
users.Name,
users.ID,
IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM
users
LEFT JOIN OnlineUseage ON
OnlineUseage.ID = users.ID and
OnlineUseage.Date >= '2016-01-01 00:00:00' AND
OnlineUseage.Date <= '2016-12-31 23:59:59'
WHERE
users.ID IN (332,554,5764,11,556,.........)
GROUP BY
users.ID,users.Name
ORDER BY
users.ID