de marzo de datos 2 es que no existe en la tabla, ¿cuál sería elegir? Es decir, dado que count()
cuenta el número de filas que existe para "Uvas" en cada fecha, y no existen filas para "Uvas" el 2 de marzo, count()
no tiene datos para contar, nada que contarle al base de datos para interpolar las fechas faltantes.
Para resolver esto, lo que he hecho en el pasado es crear una tabla separada, Calendario, que contiene una fila para cada fecha para un rango determinado. Luego, puede JOIN
en esta tabla para asegurarse de seleccionar una fila para cada fecha. Podría ser algo como esto:
SELECT cal.`Date`, 'Grapes' as `fruitName`, COUNT(f.`fruitName`)
FROM `tbl_Calendar` cal
LEFT JOIN `tbl_fruits` f ON cal.`Date` = f.`fruitDate`
WHERE `fruitName` = "Grapes"
AND '2012-03-01' <= cal.`Date` AND cal.`Date` <= '2012-03-03'
GROUP BY cal.`Date`
Tenga en cuenta que count(*)
nunca regresaría 0 porque una fila sería devuelto para cada fecha. Para obtener un 0, contar un campo que sería NULL cuando se encuentran 0 filas, en este caso, cuento fruitName
La tabla de calendario podría ser tan simple como
CREATE TABLE tbl_Calendar (
`Date` date NOT NULL PRIMARY KEY
)
Qué le llene con una simple bucle de PHP desde una fecha de inicio elegida hasta la fecha de finalización. Puede encontrar un beneficio al agregar otras columnas para almacenar en caché cosas como el día de la semana o las vacaciones, pero eso no es necesario para esta tarea.
EDITAR
En su edición, que parecen estar tratando de unirse de nuevo a sus frutas tabla para ver las fechas, pero hay algunos errores en la consulta, tratar en lugar de sustituir una sub consulta similar en lugar de mi mesa Calendario:
SELECT cal.`Date`, 'Grapes' as `fruitName`, COUNT(f.`fruitName`)
FROM (SELECT `fruitDate` as `Date` FROM `tbl_fruits` GROUP BY `fruitDate`) cal
LEFT JOIN `tbl_fruits` f ON cal.`Date` = f.`fruitDate`
WHERE `fruitName` = "Grapes"
GROUP BY cal.`Date`
Tenga en cuenta, sin embargo, si bien esto se llenará en fechas que faltan para las uvas que no faltan para algunas otras frutas, que no se llenará en las fechas que faltan para todas las frutas.
Si no hubiera ninguna entrada manzana, naranja ni de uva en el día 2 (un espacio) ... ¿cómo debería ser el resultado? –
se muestra ningún nombre de fruta en el resultado y los valores nulos para el día 2 –
Configuración de una tabla de dimensiones de tiempo en MySQL: http://www.joyofdata.de/blog/setting-up-a-time-dimension-table-in -mysql/ – Raffael