2009-07-31 52 views
0

這裏的中間就是我有這麼遠難倒在PHP循環

$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,但我不知道,我看不到它。

+2

我真的不明白你需要有4個不同的查詢,當然他們可以合併成一個單一的?你可以刪除其中的一個循環? – 2009-07-31 18:49:31

+0

另外,我會研究如何使用數組:http://us3.php.net/manual/en/language.types.array.php – 2009-07-31 18:49:50

回答

3

我與知識管理 - 您顯示的是單個頁面和循環,同時發生大量查詢 - 如果1,000人同時訪問該頁面,該怎麼辦? ouch ...

也許考慮一個更大的查詢(有一些重複的數據),並通過它循環一次?

例如:

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

你的想法。

0

我的猜測是它是一個數據問題。閱讀標題並不困難,只有贏家。如果迭代一次,我會檢查數據,並確保winners_sql_2 - winnders_sql_4獲取實際數據。也許增加一個echo winners_sql_2行,輸出查詢的內容,並確保查詢的框架正確。