2011-02-13 87 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