Question

Voici ce que j'ai jusqu'à présent -

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

Ce qui me stoppe le plus, c’est que j’obtiens cette boucle correctement, mon compteur de boucles ($ loop) fonctionne, mais il est temps de recracher les véritables récipiendaires des récompenses après la première boucle parmi les gagnants. , il ne produit que les titres de catégorie, les éléments de liste ne sont pas mis en boucle.

J'ai ajouté un petit pointeur indiquant le point de départ ou de centre du problème (> >).

Je suppose que je dois peut-être désinstaller une variable quelque part, mais je ne sais pas, je ne la vois pas.

Était-ce utile?

La solution

Je suis avec KM - vous affichez une seule page et avec vos boucles, vous avez BEAUCOUP de requêtes qui se passent en même temps - et si 1 000 personnes consultaient cette page en même temps? aïe ...

Peut-être envisager une requête plus volumineuse (avec quelques données répétées) et la parcourir une fois?

Par exemple:

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

Dans votre boucle, vous pouvez effectuer des contrôles pour déterminer si vous vous trouvez dans une nouvelle section (catégorie / quoi que ce soit):

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

Vous avez l’idée ..

Autres conseils

Je suppose que c'est un problème de données. Ce n'est pas difficile de lire les titres, mais seulement les gagnants. Si cela se répétait une fois, je vérifierais les données et veillerais à ce que winners_sql_2 - winnders_sql_4 obtienne les données réelles. Ajoutez peut-être une ligne echo winners_sql_2 pour afficher le contenu de la requête et assurez-vous que la requête est correctement encadrée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top