2011-02-13 72 views
0

PHP代碼(相關)SQL PHP的混淆複雜

$分貝= '2011-02-28'; $ a ='2011-02-01';

,這是查詢的一部分

LEFT JOIN 
     abc 
    ON 
     abc.date between '$a' and '$db' 

此查詢顯示以下結果:

1 2011-02-08 
6 2011-02-09 
6 2011-02-11 
1 2011-02-13 

,但我想要的是得到0的結果,如果有n行的其他日期。

+2

切線評論:沒有日期2011-02-30。二月只有28天。 – 2011-02-13 14:42:14

回答

1

你不能這樣做(不是不加入包含所有日期的表,至少)。

顯示0表示沒有數據的日期是應用程序的工作,而不是數據庫。這很簡單,只需編寫從開始日期到結束日期的循環,然後在結果集中沒有行的日期輸出0。

SQL的工作是告訴你什麼是數據,而不是什麼。

while ($row = mysql_fetch_array($result)) { 
    $results[$row['date']] = $row['count']; 
} 

for ($time = strtotime('2011-02-01'); $time <= strtotime('2011-02-28'); $time += 86400) { 
    $datestr = date('Y-m-d', $time); 
    if (isset($results[$datestr])) { 
     echo "Count for date $datestr: " . $results[$datestr]; 
    } else { 
     echo "Count for date $datestr: 0"; 
    } 
} 
+0

你能告訴如何做到這一點與PHP? im confused:S? – cute 2011-02-13 14:42:29