2012-02-28 57 views
5

Al seleccionar un FECHA y esa fecha no existe en mi tabla, actualmente devolverá un conjunto de resultados vacío. ¿Cómo puedo ser capaz de devolver el número cero de los resultados vacío expone, en vez ?:Pregunta MySQL para devolver el número 'cero' si no hay resultados

SELECT SUM(TOTAL), SUM(5STAR), STORE, DATE 
    FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL 

MySQL returned an empty result set (i.e. zero rows) 

Quiero volver en lugar de los resultados de la SUM(TOTAL) y SUM(5STAR) (si es cero filas) como el número cero (0).

COMPLETO estructura de la tabla:

  • ID = Primary
  • DATE = UNIQUE (fecha)
  • ALMACÉN
  • 5star
  • 4star
  • 3star
  • 2star
  • 1star
  • TOTAL DE
  • DE = ÚNICA
+0

Table structure? –

+0

Añadida estructura de tabla completa. Tal vez los únicos pueden causar un problema? Soy nuevo en esto, así que no estoy seguro. – ToddN

+0

Entonces, si no tiene ninguna fila en el conjunto de resultados, ¿quiere devolver una fila con 0-s en ella? Estoy un poco confundido. –

Respuesta

0

Creo que sería más fácil de manejar º e resultado vacío establecido en el lado de PHP (cuente las filas devueltas). Si desea manejarlo en la base de datos, debe crear un procedimiento almacenado.

DELIMITER $$ 

CREATE PROCEDURE `mc`.`new_routine` (IN DT DATETIME) 
BEGIN 

IF EXISTS (SELECT 1 FROM `table` WHERE DATE >= @DT) 
THEN 
    SELECT SUM(TOTAL) AS SumTotal, SUM(5STAR) AS Sum5Star, STORE, `DATE` 
    FROM `table` 
    WHERE DATE >= @DT 
    GROUP BY TOTAL; 
ELSE 
    SELECT 0 AS SumTotal, 0 AS Sum5Star, NULL AS STORE, NULL AS `DATE`; 
END IF; 

END 
8

TRY

SELECT 
     IFNULL(SUM(TOTAL), 0) AS total, 
     IFNULL(SUM(5STAR), 0) AS FiveStar, 
     STORE, 
     DATE 
FROM `table` 
WHERE DATE >= '2012-02-24' 
GROUP BY TOTAL 

Reference

+1

también puedes probar con 'COALESCE' – diEcho

18

Trate COALESCE

SELECT COALESCE(SUM(TOTAL),0), COALESCE(SUM(5STAR),0), STORE, DATE 
FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL 
Cuestiones relacionadas