2010-02-27 19 views
3

J'utilise ce qui suit pour saisir mon grand jeu de résultats à partir d'une base de données mysql:Catégoriser un grand résultat mysql avec PHP alors?

$discresult = 'SELECT t.id, t.subject, t.topicimage, t.topictype, c.user_id, c.disc_id FROM topics AS t LEFT JOIN collections AS c ON t.id=c.disc_id WHERE c.user_id='.$user_id; 
$userdiscs = $db->query($discresult) or error('Error.', __FILE__, __LINE__, $db->error()); 

Cette renvoie une liste de tous les éléments que l'utilisateur possède. Je suis donc besoin de classer ces éléments en fonction de la valeur de la colonne, qui Im faisant actuellement en utilisant « topictype »:

<h2>Category 1</h2> 
    <?php 

    while ($cur_img = mysql_fetch_array($userdiscs)) { 
     if ($cur_img['topictype']=="cat-1") { 
      if ($cur_img['topicimage']!="") { 
       echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"".$cur_img['topicimage']."\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
      } else { 
       echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"img/no-disc-art.jpg\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
      } 
     } 
    } 
    mysql_data_seek($userdiscs, 0); 
    ?> 
    <h2>Category 2</h2> 
    <?php 

    while ($cur_img = mysql_fetch_array($userdiscs)) { 
     if ($cur_img['topictype']=="cat-2") { 
      if ($cur_img['topicimage']!="") { 
       echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"".$cur_img['topicimage']."\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
      } else { 
       echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"img/no-disc-art.jpg\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
      } 
     } 
    } 
    mysql_data_seek($userdiscs, 0); 
    ?> 

Cela fonctionne bien quand je rincer et répéter le code, mais que le site se développe Je pense que je vais rencontrer des problèmes à mesure que le nombre d'options "topictype" augmente (en comptant environ 30 catégories). Je ne veux pas avoir à faire des requêtes séparées pour chaque groupe par catégorie des disques non plus, comme Id éventuellement avoir 30 requêtes en cours d'exécution avec l'augmentation des catégories, donc l'espoir d'entendre quelques suggestions ou approches alternatives :)

Merci

Répondre

0
vous

peut chercher qu'une seule fois, le groupe par catégories et afficher chacun:

$userdiscs = mysql_fetch_array($userdiscs); 
$categories = Array(); 
foreach ($userdiscs as $cur_img) { 
    $category = $cur_img['topictype']; 
    if (isset ($categories[$category])) $categories[$category] = Array(); 
    $categories[$category][] = $cur_img; 
} 
foreach ($categories as $category => $imgs) { 
    echo '<h2>', $category, '</h2>'; 
    foreach ($imgs as $cur_img) { 
    if ($cur_img['topicimage']!="") { 
     echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"".$cur_img['topicimage']."\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
    } else { 
     echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"img/no-disc-art.jpg\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
    } 
    } 
} 

modifier: si $cur_img['topictype'] ne correspond pas à votre titre de catégorie h2, vous pouvez avoir un « hachage tableau » comme ceci:

$categories_names = Array (
    'cat-1' => 'Category 1', 
    'cat-2' => 'Category 2', 
    'cat-3' => 'Category 3' 
) 

et remplacer echo '<h2>', $category, '</h2>'; avec echo '<h2>', $categories_names[$category], '</h2>';

+0

Merci pour l'effort, mais j'ai du mal à faire fonctionner cela. Je ne peux pas écrire correctement le code dans un commentaire alors je m'en tiendrai là et j'essaierai de le comprendre :) – Ryan

2

vous pouvez essayer d'ajouter « ORDER BY t.topictype » puis émettre l'en-tête lorsque la catégorie change

$category = ""; 

while ($cur_img = mysql_fetch_array($userdiscs)) 
{ 
    if ($cur_img['topictype'] != $category) 
    { 
     $category = $cur_img['topictype']; 
     echo '<h2>', $category, '</h2>'; 
    } 

    .... rest of output here 
} 
0

Code utilisé en réponse à dar7yls suggestion comme le montre ci-dessous, et affichant un seul disque par catégorie:

$discresult = 'SELECT t.topictype, t.id, t.subject, t.topicimage, c.user_id, c.disc_id FROM topics AS t LEFT JOIN collections AS c ON t.id=c.disc_id WHERE c.user_id='.$user_id.' ORDER BY t.topictype'; 
$userdiscs = $db->query($discresult); 

$category = ""; 

while ($cur_img = mysql_fetch_array($userdiscs)) { 
    if ($cur_img['topictype'] != $category) { 
    $category = $cur_img['topictype']; 
    echo '<h2>', $category, '</h2>'; 

    if ($cur_img['topicimage']!="") { 
     echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"".$cur_img['topicimage']."\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
    } else { 
     echo "<div><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\"><img src=\"img/no-disc-art.jpg\" style=\"width:60px; height: 60px\" /></a><br /><a href=\"viewtopic.php?id=".$cur_img['id']."\" title=\"".$cur_img['subject']."\">".$cur_img['subject']."</a></div>"; 
    } 
} 
} 
+0

Hey Ryan. ma faute. déplacer les détails de l'article en dehors du if (...) {...} – dar7yl