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