Вопрос по mysql, php – MYSQL PHP Упорядочить по дате и разделить результаты на группы по каждой дате

5

Я пытался найти решение своей проблемы, но я не совсем уверен в том, что ищу, поэтому мне не повезло.

У меня есть простая база данных MySQL с одной таблицей, называемой «деятельность». В этой таблице у меня есть поля для «start_date», «Activity_description» и «Activity_location».

Я пытаюсь выполнить запрос MySQL, используя PHP и отображать результаты в порядке возрастания дат, но все действия, приходящиеся на одну и ту же дату, разделены заголовком.

Например я пытаюсь добиться следующего.

2012-05-03

Take dog for walk Park

Go out for dinner Little Italian Restaurant

2012-05-04

Get Car Serviced Johns Auto and Mechanical

2012-05-05

Do Grocery Shopping Fresh Supermarket

Go See Movie MegaPlex Cinemas

Meet Up With Sam Hole In The Wall Bar

До сих пор я выяснил, что запрос MQSQL должен быть примерно таким:

<code>$result = mysql_query("SELECT * FROM activities ORDER BY start_date ASC")
</code>

И тогда для отображения результатов мне нужно сделать это:

<code>while($row = mysql_fetch_array($result))
{
echo 
  '<strong>' .  
  $row['start_date'] . 
  '</strong>' .
  '<ul><li>' . 
  $row['activity_description'] .
  '</li><li>' .     
  $row['activity_location'] . 
  '</li></ul>'; 
 }              
</code>

Что дает результаты примерно так, повторяя дату для каждого результата:

2012-05-03

Take dog for walk Park

2012-05-03

Go out for dinner Little Italian Restaurant

2012-05-04

Get Car Serviced Johns Auto and Mechanical

2012-05-05

Do Grocery Shopping Fresh Supermarket

2012-05-05

Go See Movie MegaPlex Cinemas

2012-05-05

Meet Up With Sam Hole In The Wall Bar

Может ли кто-нибудь дать мне несколько советов о том, как повторить «start_date»? один раз для конкретной даты, а затем повторить его снова, когда дата отличается от предыдущей даты?

Любые советы, независимо от того, насколько загадочным будет принята с благодарностью. Благодарю.

Ваш Ответ

6   ответов
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>
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;
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'];     
}  
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>';
    }
} 
3

Вы определяете дату с чем-то, что не будет похоже на дату в прошлом или просто будет ложным.

Пройдя через список, вы печатаете только свой заголовок, когда дата изменилась, и сохраняете новую дату. Именно так:

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

С Уважением, СТЕПАН

Error: User Rate Limit Exceeded user1372279
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

изменилась ли дата.

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

}

Похожие вопросы