2014-11-08 131 views
0

我想要計算在一定範圍內入住的人數。所以不到7晚,7至14晚,最後超過14晚。沒有來自SQL查詢的結果

我想輸出是這個樣子:

Range   | Count 
---------------------- 
<= 7 Nights | 3 
8 - 14 Nights | 2 
15 Nights + | 1 

我使用MYSQL和嘗試以下兩種解決方案,但沒有結果似乎不斷出現。

SELECT 
CASE 
    WHEN booking_num_nights <= 7 THEN '<= 7 Nights' 
    WHEN booking_num_nights > 7 and booking_num_nights <= 14 THEN '8 - 14 Nights' 
    WHEN booking_num_nights > 14 THEN '15 Nights +' 
    END AS range, count(*) AS count_num 
FROM BOOKING 
    WHERE booking_property_id = :id 
    GROUP BY range 

另一嘗試是如下:

SELECT booking_num_nights as range, count(*) as count_num 
FROM (SELECT 
    CASE 
     WHEN booking_num_nights <= 7 THEN '<= 7 Nights' 
     WHEN booking_num_nights > 7 and booking_num_nights <= 14 THEN '8 - 14 Nights' 
     WHEN booking_num_nights > 14 THEN '15 Nights +' 
    END AS range 
FROM BOOKING) 
WHERE booking_property_id = :id 
GROUP BY range 
+0

*「但沒有結果似乎永遠出現」 * - 這個描述非常模糊。你會得到空的結果,或者是一個錯誤?如果是這樣,請收集錯誤信息。對於另一種嘗試,你甚至沒有描述結果。另外,表格結構和示例數據也會有幫助,以及用於輸入變量':id'的值。 – GolezTrol 2014-11-08 18:28:41

+0

我打印出來的JSON,當我輸出到error_log我看到我的列名稱,但沒有任何數據的任何兩次嘗試。 – chrisalex2 2014-11-08 18:30:40

+0

如果沒有錯誤,但也沒有數據,問題不能在這種情況下,或分組。它是where子句過濾行。 where子句非常簡單,所以唯一的原因可能是你根本沒有爲':id'指定一個好的值,或者指定了一個與'booking_property_id'不匹配的值。 – GolezTrol 2014-11-08 18:32:27

回答

0

rangereserved word。無論是使用不同的名稱或逃避它:

SELECT 
    CASE 
     WHEN booking_num_nights <= 7 THEN '<= 7 Nights' 
     WHEN booking_num_nights > 7 and booking_num_nights <= 14 THEN '8 - 14 Nights' 
     WHEN booking_num_nights > 14 THEN '15 Nights +' 
    END AS `range`, count(*) AS count_num 
FROM BOOKING 
WHERE booking_property_id = :id 
GROUP BY `range` 

DEMO

+0

非常感謝!不敢相信我沒有意識到這一點。完美的作品。 – chrisalex2 2014-11-08 18:33:04

+0

您應該從查詢中收到語法錯誤。確保你設置了'PDO :: ERRMODE_EXCEPTION'。請參閱http://php.net/manual/en/pdo.error-handling.php – Barmar 2014-11-08 18:36:40