Frage

Hier ist, was ich bisher 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 wird erhalte ich diese Sache durchgeschleift richtig, mein Schleifenzähler ($ loop) funktioniert, aber wenn es wird Zeit, die eigentliche Belohnung Empfänger nach der ersten Schleife durch Gewinner auszuspucken nur, es ist die Kategorie Titel produziert, werden die Listen-Elemente nicht geschlungen heraus zu werden.

Ich habe einen kleinen Hinweis darauf, wo ich denke, das Problem oder Zentren beginnt um (>>).

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

War es hilfreich?

Lösung

ich mit KM bin - du bist eine einzelne Seite angezeigt wird und mit Loops, haben Sie eine Menge von Anfragen bekommen auf einmal passiert - was ist, wenn 1000 Menschen die Seite zur gleichen Zeit getroffen? autsch ...

Vielleicht eine größere Abfrage (mit einigen wiederholten Daten) und Schleife durch sie einmal in Betracht ziehen?

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 sind (Kategorie / was auch immer):

//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 erhalten die Idee ..

Andere Tipps

Meine Vermutung wäre, dass es sich um ein Datenproblem ist. Es ist nicht Probleme, den Titel zu lesen, nur die Gewinner. Wenn es einmal wiederholt, würde ich die Daten überprüfen und sicherzustellen, dass winners_sql_2 - winnders_sql_4 Ist-Daten bekommen. Vielleicht fügen Sie ein Echo winners_sql_2 Linie, um den Inhalt der Abfrage ausgibt, und sicherzustellen, dass die Abfrage richtig ist eingerahmt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top