2009-07-31 10 views
0

Hier ist, was ich so weitStumped in der Mitte eines PHP-Schleife

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

Wo ich ratlos bin immer, ist, dass ich diese Sache Schleife immer richtig durch, mein Schleifenzähler ($ loop) funktioniert, aber wenn es Zeit ist, die eigentlichen Belohnungsempfänger nach dem ersten Durchlauf durch die Gewinner auszuspucken, werden nur die Kategorietitel produziert, die Listenelemente werden nicht ausgeloopt.

Ich habe einen kleinen Zeiger hinzugefügt, wo ich denke, dass das Problem beginnt oder zentriert (>>).

Meine Vermutung ist, ich muss vielleicht eine var irgendwo deaktivieren, aber ich weiß es nicht, ich kann es nicht sehen.

+2

Ich verstehe wirklich nicht Ihre Notwendigkeit, 4 verschiedene Abfragen zu haben, sicherlich könnten sie zu einem einzigen kombiniert werden ?? und du könntest eine der schleifen entfernen ?? –

+0

Ich würde auch untersuchen, wie man Arrays verwendet: http://us3.php.net/manual/en/language.types.array.php –

+2

Ein weiterer Grund, nicht Arrow-Code (Tonnen von verschachtelten If-Anweisungen) zu verwenden, wenn Sie schreiben es auf Stack Overflow, es ist wirklich schwer zu lesen. –

Antwort

3

Ich bin mit KM - Sie zeigen eine einzelne Seite und mit Ihren Schleifen, haben Sie eine Menge Anfragen auf einmal passiert - Was passiert, wenn 1.000 Menschen diese Seite gleichzeitig treffen? autsch ...

Vielleicht eine größere Abfrage (mit einigen wiederholten Daten) betrachten und einmal durchlaufen?

Zum Beispiel:

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 

In der Schleife können Sie Schecks tun, um festzustellen, ob Sie in einem neuen Abschnitt (Kategorie/was auch immer) sind:

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

Sie bekommen die Idee.

+0

Art von ich denke. Ich bin nicht so erfahren, aber ich habe diese Abfrage in SQLyog ausgeführt, damit ich sehe, was es macht. Ich muss nur meine Loops überarbeiten, denke ich ... ich denke ich verstehe. – Marty

+0

Definitiv der beste Weg, dies zu tun. @Marty - wenn Sie noch weitere Fragen haben, wissen Sie, wo Sie sie fragen können! –

+0

Ich bin jetzt ziemlich viel verloren, wenn es um den Kommentar kommt „in der Schleife in Gang halten“ – Marty

0

Meine Vermutung wäre, dass es ein Datenproblem ist. Es hat keine Probleme, die Titel zu lesen, nur die Gewinner. Wenn es einmal iteriert würde, würde ich die Daten überprüfen und sicherstellen, dass winners_sql_2 - winnders_sql_4 tatsächliche Daten erhält. Fügen Sie möglicherweise eine echo winners_sql_2-Zeile hinzu, um den Inhalt der Abfrage auszugeben und sicherzustellen, dass die Abfrage korrekt umrahmt ist.

Verwandte Themen