0

これが私がこれまでに得たものです-

$awards_sql_1 = mysql_query('SELECT * FROM categories WHERE section_id = 1') or die(mysql_error());
$awards_sql_2 = mysql_query('SELECT * FROM categories WHERE section_id = 2') or die(mysql_error());
$awards_sql_3 = mysql_query('SELECT * FROM categories WHERE section_id = 3') or die(mysql_error());
$awards_sql_4 = mysql_query('SELECT * FROM categories WHERE section_id = 4') or die(mysql_error());

$loop = 1;

while($row_sections = mysql_fetch_array($sections_query)) {
    $category = 1;
    echo "<h3>" . $row_sections['section_name'] . " (Loop# $loop)</h3>";

    while($categories = mysql_fetch_array(${"awards_sql_{$loop}"})) {
        ${"winners_sql_{$loop}"} = mysql_query("SELECT * FROM 2009_RKR_bestof WHERE section = $loop && category = $category ORDER BY result_level ASC") or die(mysql_error());
        echo "<h4><strong>{$categories['category_name']}</strong></h4>";
        echo "<ul class=\"winners\">";
>>          while($winners = mysql_fetch_array(${"winners_sql_{$loop}"})) {
                switch ($winners['result_level']) {
                    case 1: $result_level = "Platinum"; break;
                    case 2: $result_level = "Gold"; break;
                    case 3: $result_level = "Silver"; break;
                }
                if (isset($winners['url'])) { $anchor = "<a href=\"http://{$winners['url']}\" target=\"_blank\">"; $close = "</a>"; }
                echo "<li>$anchor{$winners['winner']}$close ($result_level)</li>";

                unset($anchor);
                unset($close);
            }
        echo "</ul>";
        $category++;
    }
    $loop++;
}

私が困惑しているところは、これが正しくループするようになっていることです。私のループ カウンター ($loop) は機能していますが、勝者を介した最初のループの後に実際の報酬の受信者を吐き出す時間になると、それはカテゴリのタイトルを作成すると、リスト項目がループアウトされません。

私は、問題がどこから始まるか、どこに集中していると思われるかについての小さなポインタを追加しました (>>)。

私の推測では、var をどこかで設定解除する必要があるかもしれませんが、わかりません。それを見ることができません。

4

2 に答える 2

3

私は KM と一緒です。あなたは 1 つのページを表示していて、ループを使用すると、一度に大量のクエリが発生します。1,000 人が同時にそのページにアクセスしたらどうなるでしょうか? ああ...

おそらく、より大きなクエリ (いくつかの繰り返しデータを含む) を検討し、それを 1 回ループしますか?

例えば:

SELECT 
  section_name, 
  category_name,
  result_level,
  url,
  winner
FROM 2009_RKR_bestof
INNER JOIN categories ON 2009_RKR_bestof.category = categories.id
INNER JOIN sections ON 2009_RKR_bestof.section = sections.id
ORDER BY section_name,category_name ASC

ループ内で、新しいセクション (カテゴリなど) にいるかどうかを判断するためのチェックを行うことができます。

//pseudo-code
$current_section = "";
while($stuff = mysql_fetch_array($sql))
{
  if ($current_section == "")
  {
    $current_section = $stuff["section_name"];
  }
  if ($current_section == $stuff["section_name"])
  {
    //keep going in your loop
  }
  else
  {
    //we've gotten to a new section - so close your html and start a new section
  }
}

あなたはアイデアを得る..

于 2009-07-31T19:11:35.157 に答える
0

私の推測では、それはデータの問題だと思います。タイトルを読むのに問題はなく、勝者だけです。一度繰り返すと、データをチェックして、winners_sql_2--winnders_sql_4が実際のデータを取得していることを確認します。おそらく、エコーwinners_sql_2行を追加して、クエリの内容を出力し、クエリが正しくフレーム化されていることを確認します。

于 2009-07-31T18:52:08.550 に答える