2009-07-31 55 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行,输出查询的内容,并确保查询的框架正确。