我试图找到解决问题的方法,但我不确定我要搜索的是什么,所以我运气不好。
我有一个简单的MySQL数据库,其中一个表叫做“活动”。在该表中,我有“start_date”,“activity_description”和“activity_location”的字段。
我正在尝试使用PHP进行MySQL查询并以升序日期顺序显示结果,但是将所有属于同一日期的活动用标题分隔。
例如,我正在努力实现以下目标。
2012-05-03
2012-05-04
2012-05-05
到目前为止,我已经知道MQSQL查询需要是这样的:
$result = mysql_query("SELECT * FROM activities ORDER BY start_date ASC")
然后显示我需要执行此操作的结果:
while($row = mysql_fetch_array($result))
{
echo
'<strong>' .
$row['start_date'] .
'</strong>' .
'<ul><li>' .
$row['activity_description'] .
'</li><li>' .
$row['activity_location'] .
'</li></ul>';
}
给出结果,重复每个结果的日期:
2012-05-03
2012-05-03
2012-05-04
2012-05-05
2012-05-05
2012-05-05
有人可以给我一些关于如何仅针对特定日期回显“start_date”的提示,然后在日期与上一个日期不同时再次回复它吗?
任何提示,无论多么神秘,都会非常感激。谢谢。
答案 0 :(得分:3)
只需跟踪日期。
您可以使用过去看起来不像日期的内容来定义日期,或者只是假。
在lis中运行时,您只在日期更改时打印标题并保存新日期。就像这样:
$currentDate = false;
while($row = mysql_fetch_array($result))
{
if ($row['start_date'] != $currentDate){
echo
'<strong>' .
$row['start_date'] .
'</strong>' ;
$currentDate = $row['start_date'];
}
echo
'<ul><li>' .
$row['activity_description'] .
'</li><li>' .
$row['activity_location'] .
'</li></ul>';
}
此致 STEFAN
答案 1 :(得分:2)
可以这样做。
<?php
$data = array();
$result = mysql_query("SELECT * FROM activities ORDER BY start_date ASC")
while($row = mysql_fetch_array($result))
{
if(isset($data[$row['start_date']]))
{
$data[$row['start_date']][] = $row;
}
else
{
$data[$row['start_date']] = array($row);
}
}
?>
<ul>
<?php foreach($data as $date => $rows): ?>
<li>
<strong><?php echo $date; ?></strong>
<ul>
<?php foreach($rows as $row): ?>
<li><?php echo $row['activity_description']; ?></li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
答案 2 :(得分:0)
试试这个,可能有效:
$last_date = '';
while($row = mysql_fetch_array($result))
{
$display_date = ($last_date == $row['start_date']) ? '' : $row['start_date'];
echo
'<strong>' .
$display_date .
'</strong>' .
'<ul><li>' .
$row['activity_description'] .
'</li><li>' .
$row['activity_location'] .
'</li></ul>';
$last_date = $row['start_date'];
}
答案 3 :(得分:0)
$result = array();
while($row = mysql_fetch_array($result))
{
if (empty($result[$row['start_date']]))
{
$result[$row['start_date']] = array();
}
$result[$row['start_date']][] = array($row['activity_description'], $row['activity_location']);
}
foreach($result as $key=>$value)
{
echo
'<strong>' .
$key .
'</strong>';
foreach($value as $act)
{
'<ul><li>' .
$act[0] .
'</li><li>' .
$act[1] .
'</li></ul>';
}
}
答案 4 :(得分:0)
将日期放在变量$ date中,如果日期已更改,请检查每一行。
$date = "";while($row = mysql_fetch_array($result)){
if ($date != $row['start_date'])
{
$date = $row['start_date'];
echo '<strong>'.$row['start_date'].'</strong>';
}
echo '<ul><li>'.$row['activity_description'].'</li><li>'.$row['activity_location'].'</li></ul>';
}
答案 5 :(得分:0)
尝试这样的事情(我省略了一些风格添加以使其更加清晰):
$yourdate = '';
$output = '';
while($row = mysql_fetch_array($result)) {
if ($yourdate != $row['start_date']) {
$output .= $row['start_date'];
}
$output .= '<ul><li>' .
$row['activity_description'] .
'</li><li>' .
$row['activity_location'] .
'</li></ul>';
}
echo $output;