2012-02-28 28 views
5

Khi chọn ngày DATE và ngày đó không tồn tại trong bảng của tôi, hiện tại nó sẽ trả về một tập kết quả trống. Làm thế nào tôi có thể có khả năng để trả lại số không đối với những kết quả rỗng đặt thay vì ?:Truy vấn MySQL để trả về số 'không' nếu không có kết quả

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) 

Tôi muốn thay vì trả lại kết quả của SUM(TOTAL)SUM(5STAR) (nếu không hàng) như số không (0).

ĐẦY ĐỦ BẢNG CƠ CẤU:

  • ID = tiểu
  • NGÀY = UNIQUE (ngày)
  • CỬA HÀNG
  • 5 sao
  • 4 sao
  • 3 sao
  • 2 sao
  • 1STAR
  • TỔNG
  • TỪ = UNIQUE
+0

Cấu trúc bảng? –

+0

Đã thêm cấu trúc bảng đầy đủ. Có lẽ các đồ cổ có thể gây ra một vấn đề? Im mới để điều này nên không chắc chắn. – ToddN

+0

Vì vậy, nếu bạn không có hàng trong tập kết quả, bạn muốn trả về một hàng có 0-s trong đó? Tôi có đôi chút hoang mang. –

Trả lời

0

Tôi nghĩ rằng nó sẽ được dễ dàng hơn để xử lý thứ e kết quả trống được đặt ở phía PHP (đếm các hàng được trả lại). Nếu bạn muốn xử lý nó trong cơ sở dữ liệu, bạn nên tạo một thủ tục lưu sẵn.

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

bạn cũng có thể thử với 'COALESCE' – diEcho

18

Hãy thử COALESCE

SELECT COALESCE(SUM(TOTAL),0), COALESCE(SUM(5STAR),0), STORE, DATE 
FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL 
Các vấn đề liên quan