Вот что у меня есть,
$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++; }
Где я становлюсь тупым, я получаю эту штуку, чтобы правильно проехать, мой счетчик циклов (цикл $) работает, но когда наступает время выплевывать фактических получателей вознаграждения после первого цикла через победителей, это только создавая заголовки категорий, элементы списка не замыкаются.
Я добавил небольшой указатель на то, где я думаю, что проблема начинается или сосредотачивается вокруг (>>).
Я предполагаю, что мне нужно, возможно, отключить var где-нибудь, но я не знаю, я не вижу этого.
Я с KM – вы показываете одну страницу и с вашими циклами, у вас есть много запросов, которые происходят сразу – что, если 1000 человек попадают в эту страницу одновременно? Уч …
Возможно, рассмотрите более крупный запрос (с некоторыми повторяющимися данными) и пропустите его один раз?
Например:
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 получат фактические данные. Возможно, добавьте строку echo winners_sql_2, чтобы вывести содержимое запроса и убедиться, что запрос правильно оформлен.