質問
ここに私が持っているものを示します-
$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)は動作していますが、勝者を通して最初のループの後に実際の報酬受信者を吐き出す時間があるとき、カテゴリタイトルのみを生成し、リスト項目はループアウトされません。
問題の始まりまたは中心と思われる場所への小さなポインタを追加しました(&gt;&gt;)。
おそらくどこかで変数の設定を解除する必要があると思いますが、わかりません。見えません。
解決
私はKMと一緒です-単一のページを表示し、ループを使用すると、一度に多くのクエリが発生します。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
}
}
アイデアが得られます。
他のヒント
データの問題だと思います。タイトルを読むのに問題はなく、勝者だけが問題を抱えています。一度繰り返した場合、データをチェックし、winners_sql_2-winnders_sql_4が実際のデータを取得していることを確認します。おそらく、エコーのwinners_sql_2行を追加して、クエリの内容を出力し、クエリが正しくフレーム化されていることを確認してください。
所属していません StackOverflow