MYSQL PHP 按日期排序,并将每个日期的结果分成几组


MYSQL PHP Order By Date and separate results into groups per each date

我试图寻找解决问题的方法,但我不确定我在寻找什么,所以我没有太多运气。

我有一个简单的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",然后在日期与上一个日期不同时再次回显?

任何提示,无论多么神秘,都将不胜感激。谢谢。

只需跟踪日期。

你定义一个日期,它不会像过去的日期那样出现,或者只是假的。

在日志中,您仅在日期更改时打印标题并保存新日期。就像这样:

$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>'; 
 }  

问候斯特凡

可以这样做。

<?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>

试试这个,可能会起作用:

$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'];     
}  
$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>';
    }
} 

将日期放在变量$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>'; 

}

尝试这样的事情(我省略了一些样式添加以使其更清晰(:

$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;