我一直在尝试将数据库的输出分组为时间段。
例如
2013年5月
一些数据
更多数据
2013年6月
一些数据
一些数据
下面的代码在一定程度上起作用,但每个月只会放一行数据,即使应该有更多。即每个月有多行数据
任何人都可以解释原因吗?
function show_records($mysql_link)
{
date_default_timezone_set('Europe/London');
$today=date('Y/m/d');
$future=date('Y-m-d', strtotime("+10 months", strtotime($today)));
$q="SELECT number,startdate,traction,tourname,start,fares,tourcompany
FROM specials
WHERE startdate>='$today' AND startdate<='$future' AND steam='y'
ORDER BY startdate";
$r=mysqli_query($mysql_link,$q);
$lastmonth="";
if ($r)
{
echo "<Table id='customers'>
<tr>
<th>Date</th>
<th>Locomotive</th>
<th>Organiser</th>
<th>Name</th>
<th>Pick Up Points</th>
<th>Destination</th>
<th>Fares</th>
</tr>";
while ($row=mysqli_fetch_array($r,MYSQLI_ASSOC))
{
$parts=explode('-',$row['startdate']);
$timestamp=strtotime($row['startdate']);
$parts2=date('YM',$timestamp);
if (empty($lastmonth)|| $lastmonth!=$parts2)
{
if (!empty($lastmonth))
{
echo '</table>';
}
echo "<h1>$parts2</h1>";
echo "<table id='customers'>";
$lastmonth=$parts2;
echo "<tr>";
echo "<td>".$parts2."</td>";
echo "<td>".$row['traction']."</td>";
echo "<td>".$row['tourcompany']."</td>";
echo "<td>".$row['tourname']."</td>";
echo "<td>".$row['start']."</td>";
echo "<td>".$row['end']."</td>";
echo "<td>".$row['fares']."</td>";
echo "</tr>";
}
echo "</Table>";
}
}
else {echo '<p>'.mysqli_error($mysql_link).'</p>' ;}
}
show_records($mysql_link);
mysqli_close($mysql_link);
?>
答案 0 :(得分:1)
仅在$lastmonth != $parts2
时打印行数据。请改用以下代码:
if (empty($lastmonth) || $lastmonth != $parts2) {
if (!empty($lastmonth)) {
echo '</table>';
}
echo "<h1>$parts2</h1>";
echo "<table>";
$lastmonth = $parts2;
}
echo "<tr>";
echo "<td>".... // and so on
答案 1 :(得分:0)
在循环中,$ lastmonth变量仅在第一次更新。那么你只是在寻找它是空的&#34;它将永远不会在第一次更新后。解决这个问题,我敢打赌它会很棒!