5

私は自分の問題の解決策を探そうとしましたが、何を探しているのかよくわからないので、あまり運がありませんでした。

「アクティビティ」と呼ばれる1つのテーブルを持つ単純なMySQLデータベースがあります。そのテーブルには、「start_date」、「activity_description」、および「activity_location」のフィールドがあります。

PHPを使用してMySQLクエリを実行し、結果を日付の昇順で表示しようとしていますが、同じ日付に該当するすべてのアクティビティが見出しで区切られています。

たとえば、私は次のことを達成しようとしています。

2012-05-03

  • 犬を散歩に連れて行く
  • 公園

  • 夕食に出かけます
  • リトルイタリアンレストラン

2012-05-04

  • 車の整備を受ける
  • ジョンズオートアンドメカニカル

2012-05-05

  • 食料品の買い物をする
  • 新鮮なスーパーマーケット

  • 映画を見に行く
  • MegaPlexシネマ

  • サムと会う
  • ウォールバーの穴

これまでのところ、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

  • 映画を見に行く
  • MegaPlexシネマ

2012-05-05

  • サムと会う
  • ウォールバーの穴

特定の日付に対して「start_date」を1回だけエコーし、日付が前の日付と異なる場合に再度エコーする方法について、誰かにヒントを教えてもらえますか?

どんなに謎めいたものであっても、どんなヒントでも大歓迎です。ありがとう。

4

6 に答える 6

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

よろしく、ステファン

于 2012-05-03T11:34:23.883 に答える
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>
于 2012-05-03T11:34:52.433 に答える
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>'; 

}

于 2012-05-03T11:32:55.817 に答える
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;
于 2012-05-03T11:34:06.660 に答える
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'];     
}  
于 2012-05-03T11:30:56.690 に答える
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>';
    }
} 
于 2012-05-03T11:32:33.857 に答える