2009-07-31 3 views
0

オーケーと困惑したので、私はこの質問へのアドバイスに続く:Stumped in the middle of a PHP loop- PHPループ

をしかし、今、私は以前よりもさらに多くの問題を抱えています。ここで私がこれまで持っているものです。

$sql = "SELECT section_name, category_name, result_level, url, winner FROM 2009_RKR_bestof INNER JOIN categories ON 2009_RKR_bestof.category = categories.category_id INNER JOIN sections ON 2009_RKR_bestof.section = sections.section_id ORDER BY section_name,category_name ASC"; 
$query = mysql_query($sql); 

$current_section = ""; 
while ($stuff = mysql_fetch_array($query)) { 
    if ($current_section == "") { 
     $current_section = $stuff["section_name"]; 
     echo "<h3>$current_section</h3>"; 
     echo "<h4>$stuff[category_name]</h4>"; 
    } 
    if ($current_section == $stuff["section_name"]) { 
      //what the heck do i do here? 

    } elseif ($current_section != $stuff["section_name"]) { 
     $current_section = $stuff["section_name"]; 
     echo "<h3>$current_section</h3>"; 
    } 
} 

そして、私の出力はここにある:私の古いコードによってhttp://www.theroanoker.com/bestof/index1.php
、私はここまで得ていた:http://www.theroanoker.com/bestof/index2.php

私は壁に頭を叩いています。誰かがもう少し私を導くことができますか?

+2

多分あなたはより良い(対話的な)ヘルプを得ることができるフォーラムにあなたの質問をする必要がありますか? SOの形式は、一方向のQ&Aをもっと目的としています。私はSitepoint for PHPに関連する質問を推奨することができます:http://www.sitepoint.com/forums/forumdisplay.php?f=34 – troelskn

+0

'$ stuff'に対して' var_dump'を実行して、私があなたが何をしているのかを見ることができますか?と? –

+1

あなたは何をしようとしているのか説明できますか? – Dirk

答えて

1

遅いですが、ループを1回通して物事を整理すれば、理解するのが簡単だと思います。だから、最初のパスで何もエコーしないで、$ sections = array();のような2つの配列を作成してください。 $カテゴリ= array();それから、あなたが見ているときに、$ categories [$ category ["category_name"]] = $ stuffのようなものを行い、セクションについても同じことをします。

が続いカテゴリとセクションのアレイを介して第2のループを作り、

1

警告それらをプリントアウト:$ものののvar_dumpもあなたのテーブルの構造の知識もないとを、それが自然を直感するのは難しいですあなたが戻ってくる結果のつまり、私はあなたの結合が、いくつかのテーブルからのデータを含む一連の行を生成すると思います - あなたの 'section_name'列は、1つです。

もしそうなら、ループで適切な一般的な考え方が得られます。リストを出力するコードを追加するだけで済みます。これは$ stuff ["section_name"]が変更されるまで実行されるネストされたループの形を取ります。あなたのループは次のようになります。あなたの結果が与えられた「SECTION_NAME」を含むすべての結果が結果配列に連続しているように順序付けされていない場合上記警告

$stuff = mysql_fetch_array($query); 
while ($stuff) { 
    echo "<h3>{$stuff['section_name']}</h3>"; 
    echo "<h4>{$stuff['category_name']}</h4>"; 

    $current_section = $stuff['section_name']; 
    echo '<ul>'; //start list 
    while ($current_section == $stuff['section_name']) { 
     echo '<li>'. /* Your data here */ .'</li>'; 

     $stuff = mysql_fetch_array($query); 
    } 
    echo '</ul>'; 
} 

が失敗しました。

0

これまで説明してきた例と与えた例から、私はこれがあなたが探しているものだと確信しています。

これは、クエリが正常であり、期待した結果が得られていることを前提としています。

$sql = "SELECT section_name, category_name, result_level, url, winner 
     FROM 2009_RKR_bestof 
     INNER JOIN categories 
      ON 2009_RKR_bestof.category = categories.category_id 
     INNER JOIN sections 
      ON 2009_RKR_bestof.section = sections.section_id 
     ORDER BY section_name,category_name ASC"; 
$result = mysql_query($sql); 
if (!$result) { 
    echo mysql_error(); 
    exit; 
} 


$current_section = ""; 
$first_row = true; 
while ($row = mysql_fetch_assoc($result)) { 
    if ($current_section != $row['section_name']) { 
     // We don't want our closeing list tag the first run through the loop 
     if (!$first_row) { 
      echo '</ul>'; 
     } 
     // We need to print our header row 
     $current_section = $row['section_name']; 
       echo "<h3>$current_section</h3>"; 
       echo "<h4>$row[category_name]</h4>"; 
     // And start our list 
     echo '<ul>'; 
     // Ensure our next time we draw our heading, we draw the closing </ul> tag 
     $first_row = false; 
    } 
    $link = '<li>'; 
    if (strlen($row['url'] > 0)) { 
     $link .= '<a href="' . $row['url'] . '">' . $row['winner'] . '</a> ('; 
    } else { 
     $link .= $row['winner'] . ' ('; 
    } 
    switch ($row['result_level']) { 
     case 1: 
      $link .= 'Platinum'; 
     break; 
     case 2: 
      $link .= 'Gold'; 
     break; 
     case 3: 
      $link .= 'Silver'; 
     break; 
    } 
    $link .= ')</li>'; 
    echo $link; 
}