PHP döngünün ortasında Stumped

2 Cevap php

İşte bende ne kadar-

$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++;
}

Ben şaşkına alıyorum nerede, benim döngü sayacı ($ loop) çalışıyor, doğru döngü bu şeyi alıyorum, ancak kazananlar ile ilk döngü sonra asıl ödül alıcıları tükürmek için zaman alır zaman, bu sadece bulunuyor kategori başlıkları üreten, liste öğeleri dışarı döngüye almıyorsanız.

Ben sorun başlar veya (>>) etrafında merkezleri düşünmek nerede küçük bir işaretçi ekledi.

Benim tahminim bir yerde bir var, belki unset gerekiyor, ama ben bilmiyorum, ben onu göremiyorum.

2 Cevap

Tek bir sayfa görüntüleme konum ve döngüler ile, bir kerede oluyor sorguları bir LOT var - - Ben KM beraberim 1000 kişi aynı anda o sayfayı isabet ne olur? ah ...

Belki bir kez bunun üzerinden büyük bir (bazı tekrarlanan verileri ile) sorgu ve döngü düşünün?

Örneğin:

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

Eğer döngü, size yeni bir bölüm (kategori / ne olursa olsun) iseniz belirlemek için kontrolleri yapabilirsiniz:

//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
  }
}

Siz anladınız ..

Benim tahminim bir veri sorunu olduğunu olurdu. Bu sorun başlıkları, sadece kazananları okuyor sahip değildir. Bir zamanlar iterated, ben verileri kontrol ve bu winners_sql_2 sağlayacak - gerçek verileri alıyorsanız winnders_sql_4. Belki çıkış sorgunun içeriği için, bir yankı winners_sql_2 satır eklemek ve sorgu düzgün çerçeveli emin olun.