2012-02-28 21 views
5

DATEを選択し、その日付が自分のテーブルに存在しない場合、現在空の結果セットが返されます。どのように私は、これらの空の結果のために数字のゼロを返すことができることができ結果がない場合、数字「0」を返すMySQLクエリ

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) 

は、私が代わりに数字のゼロ(0)としてSUM(TOTAL)SUM(5STAR)(ゼロ行の場合)の結果を返すようにしたい?:代わりに設定します。

FULLテーブル構造:

  • ID =プライマリ
  • DATE = UNIQUE(日付)
  • STORE
  • 5星級
  • 4STAR
  • 3STAR
  • 2STAR
  • 1STAR
  • からの総
  • = UNIQUE
+0

表の構造は? –

+0

フルテーブル構造が追加されました。おそらくユニークで問題が発生する可能性がありますか?私はこれに新しいので、よく分からない。 – ToddN

+0

結果セットに行がない場合、その行に0を含む1つの行を戻したいとしますか?私はちょっと混乱している。 –

答えて

0

をお試しくださいPHP側で空の結果セットを返します(返された行を数えます)。データベースで処理する場合は、ストアドプロシージャを作成する必要があります。

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

また、 'COALESCE'を試してみることもできます – diEcho

18

私は目を処理するために容易になるだろうと思いますCOALESCE

SELECT COALESCE(SUM(TOTAL),0), COALESCE(SUM(5STAR),0), STORE, DATE 
FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL 
関連する問題