Php 按日期小计

Php 按日期小计,php,mysql,Php,Mysql,我试图解决一个问题,但没有成功 我有一个索引页和用户搜索。比如说 我想做的是小计。我的意思是我想按天计算总数 例如,用户搜索2012-02-22和2012-02-23,但我需要每月22和23的总计 要做到这一点:我是这样做的,它是基于t计算的 while ($info = mysql_fetch_array($dbResult)) { $total+= $info['totalEvents'

我试图解决一个问题,但没有成功

我有一个索引页和用户搜索。比如说

我想做的是小计。我的意思是我想按天计算总数

例如,用户搜索2012-02-22和2012-02-23,但我需要每月22和23的总计

要做到这一点:我是这样做的,它是基于t计算的

while ($info = mysql_fetch_array($dbResult)) {
                                                    $total+= $info['totalEvents'];
                                                    $total2 = 0;
                                                    echo "<tr>";
                                                    echo "<td><input type=checkbox name='check1' id='check1' value='" . $info['eventCategory'] . "' onclick=recal(" . $info['totalEvents'] . ",this.checked) checked></td>
                                                     <label id ='nameID'><td>" . $info['id'] . "      " . $info['profileName'] . "</td>";
                                                    echo "<td><label id='eventCategory'>" . $info['eventCategory'] . "</td>";
                                                    echo "<td><label id='totalEvents'>" . $info['totalEvents'] . "</label></td>";

                                                    if ($info['Date'] != $previousDate) {
                                                        echo "<td><b>" . $info['Date'] . "</b></td></tr>";
                                                        $total2++;
                                                    } else {
                                                        echo "<td></td>";
                                                    }
                                                    $previousDate = $info['Date'];
                                                }
while($info=mysql\u fetch\u数组($dbResult)){
$total+=$info['totalEvents'];
$total2=0;
回声“;
回声“
“$info['id']”.$info['profileName']”;
回显“$info['eventCategory']”;
回显“$info['totalEvents']”;
如果($info['Date']!=$previousDate){
回显“$info['Date']”;
$total2++;
}否则{
回声“;
}
$previousDate=$info['Date'];
}
但它是这样计算的

我终于说到这里了 但我算错了

else if ($_POST['group1'] == 'VideoFinish') {
                                                $dbResult = mysql_query("SELECT la.id,st.profileName, la.totalEvents,la.Date,ft.eventCategory FROM videofinish la INNER JOIN profiles st ON st.id=la.id INNER JOIN eventcategory ft ON ft.id = la.eventCategoryID where Date BETWEEN '" . $startDate . "' and '" . $endDate . "'");

                                                if (isset($_POST['checkPremium'])) {
                                                    $dbResult = mysql_query("SELECT la.id,st.profileName, la.totalEvents,la.Date,ft.eventCategory FROM videofinish la INNER JOIN profiles st ON st.id=la.id and st.isPremium=1 INNER JOIN eventcategory ft ON ft.id = la.eventCategoryID where Date BETWEEN '" . $startDate . "' and '" . $endDate . "'");
                                                }

                                                $previousDate = '';
                                                $totalDay = 0;
                                                while ($info = mysql_fetch_array($dbResult)) {
                                                    $total+= $info['totalEvents'];
                                                    echo "<tr>";
                                                    echo "<td><input type=checkbox name='check1' id='check1' value='" . $info['eventCategory'] . "' onclick=recal(" . $info['totalEvents'] . ",this.checked) checked></td>
                                                     <label id ='nameID'><td>" . $info['id'] . "      " . $info['profileName'] . "</td>";
                                                    echo "<td><label id='eventCategory'>" . $info['eventCategory'] . "</td>";
                                                    echo "<td><label id='totalEvents'>" . $info['totalEvents'] . "</label></td>";

                                                    if ($info['Date'] != $previousDate && $info['Date'] != $previousDate) {
                                                        echo "<td><b>" . $info['Date'] . "</b></td></tr>";
                                                        echo "<b>".$info['Date']."</b>:";
                                                         echo  $totalDay."<br />";
                                                    } else {

                                                        echo "<td></td>";
                                                    }
                                                    $previousDate = $info['Date'];
                                                    $totalDay += $info['totalEvents'];


                                                }
                                                echo "<td><b id='total'>" . $total . "</b></td>";

                                            }
else if($\u POST['group1']=='VideoFinish'){
$dbResult=mysql_查询(“从videofinish中选择la.id、st.profileName、la.totalEvents、la.Date、ft.eventCategory st ON st.id=la.id内部连接配置文件st ON st.id=la.id内部连接事件类别ft ON ft ON ft.id=la.eventCategoryID,其中日期介于“.$startDate.”和“.$endDate.”);
如果(isset($_POST['checkPremium'])){
$dbResult=mysql\u查询(“从videofinish中选择la.id、st.profileName、la.totalEvents、la.Date、ft.eventCategory st ON st.id=la.id和st.isPremium=1 in-JOIN-eventCategory ft ON-ft.id=la.eventCategoryID,其中日期介于“.$startDate.”和“.$endDate.”);
}
$previousDate='';
$totalDay=0;
而($info=mysql\u fetch\u数组($dbResult)){
$total+=$info['totalEvents'];
回声“;
回声“
“$info['id']”.$info['profileName']”;
回显“$info['eventCategory']”;
回显“$info['totalEvents']”;
如果($info['Date']!=$previousDate&$info['Date']!=$previousDate){
回显“$info['Date']”;
回显“$info['Date']”:“;
echo$totalDay.“
”; }否则{ 回声“; } $previousDate=$info['Date']; $totalDay+=$info['totalEvents']; } 回显“$total.”; }

您可以按您的日期字段对mysql语句中的日期字段进行分组。

试试这个。。为了您的理解,我在代码中添加了注释

// initialize counter and previous date
$totalDay = 0;
$previousDate = NULL;

// we need to change the loop structure so that the loop code is executed
// a last time when there are no further rows. Otherwise, we would have
// no total on the last day!
while (true) {
    // we break the loop when there are no further rows after sub total is printed
    $info = mysql_fetch_array($dbResult);

    // when date changes, print total line and reset counter
    if ( $previousDate <> NULL && 
        ( !isset($info['Date']) || $info['Date'] <> $previousDate ) ) {
        echo '<tr>';
        // no checkbox
        echo '<td></td>'; 
        // label in second cell
        echo '<td><b>Total for day ' . $previousDate .'</b></td>';
        // total in last cell
        echo '<td colspan="4" align="right"><b>' . $totalDay . '</b></td>';
        echo '</tr>';
        // day has changed, so reset the sub total for next day
        $totalDay = 0;
    }

    // now if the have no further rows, break the loop
    if ($info == false)
        break;

    // add current value to sub total
    $totalDay += $info['totalEvents'];

    echo "<tr>";
    echo "<td><input type=checkbox name='check1' id='check1' value='" . $info['eventCategory'] . "' 
            onclick=recal(" . $info['totalEvents'] . ",this.checked) checked></td>";
    echo "<label id ='nameID'><td>" . $info['id'] . "      " . $info['profileName'] . "</td>";
    echo "<td><label id='eventCategory'>" . $info['eventCategory'] . "</td>";
    echo "<td><label id='totalEvents'>" . $info['totalEvents'] . "</label></td>";

    echo "<td>";    
    // when date changes (also on first day), print date
    if ($info['Date'] <> $previousDate) {
        echo "<b>" . $info['Date'] . "</b>";
    }
    echo "</td>";
    echo "</tr>";

    // remember current date for next row calculation
    $previousDate = $info['Date'];
}
//初始化计数器和上一个日期
$totalDay=0;
$previousDate=NULL;
//我们需要更改循环结构,以便执行循环代码
//最后一次没有其他行时。否则,我们会
//最后一天没有总数!
while(true){
//当打印sub total后没有更多行时,我们中断循环
$info=mysql\u fetch\u数组($dbResult);
//当日期更改时,打印总行并重置计数器
如果($previousDate NULL&&
(!isset($info['Date'])| |$info['Date']$previousDate)){
回声';
//无复选框
回声';
//第二个单元格中的标签
回显“天总计”。$previousDate.';
//最后一个单元格中的总计
echo“.$totalDay.”;
回声';
//日期已更改,因此请重置第二天的小计
$totalDay=0;
}
//现在,如果没有其他行,请中断循环
如果($info==false)
打破
//将当前值添加到小计中
$totalDay+=$info['totalEvents'];
回声“;
回声“;
回显“$info['id']”。$info['profileName']”;
回显“$info['eventCategory']”;
回显“$info['totalEvents']”;
回声“;
//日期更改时(也在第一天),打印日期
如果($info['Date']$previousDate){
回显“$info['Date']”;
}
回声“;
回声“;
//记住下一行计算的当前日期
$previousDate=$info['Date'];
}
尝试此查询

select * from table 
GROUP BY date_column 
WHERE date_column between "2001-01-05" and "2001-01-10"

如果22在25之间,我想计算22,23,24,25@MertMET你可以用between-mysql子句来表示这个意思。@MertMETİN你的意思是“什么都没有”?