10
votes

PHP & MySQL: Utilisation de groupe par catégories

Ma base de données a la configuration suivante

category #1
item 1 
item 2
item 3

category #2
item 1 
item 2
item 3


2 commentaires

Publiez la requête que vous utilisez afin que quelqu'un puisse fournir au PHP de sortir les données.


Je n'ai aucune question, ma question est de savoir quelle requête à utiliser. Le message inclut ma configuration de la base de données (les données contenues) et la manière dont je souhaite qu'il affiche, que dois-je inclure d'autre?


6 Réponses :


2
votes

Ce que vous voulez, c'est de les commander par la catégorie, ne les groupez pas.

SELECT * FROM MyTable
ORDER BY category_id, product_id


0 commentaires

0
votes

Le moyen le plus simple est probablement de tirer la liste des catégories, de parcourir et de tirer leurs produits attachés. (C'est-à-dire plusieurs requêtes.)

par exemple (pseudocode): xxx

Si vous voulez tout faire dans une requête, vous pouvez faire quelque chose comme: xxx

puis vous pouvez itérer sur le jeu de résultats et retirer le nom de la catégorie chaque fois que cela change.

Il peut y avoir un moyen plus sophistiqué et élégant d'écrire le SQL à Faites tout avant de l'obtenir de la base de données, mais je ne suis pas si intelligent. ;)

Remarque: les exemples utilisent le code pseudo. J'utilise une classe d'abstraction MySQL qui fonctionne comme: xxx

i peut alors foreach ($ DB-> multi_result () comme $ rangée) , qui est super paresseux et génial.

Je peux poster le code de la couche d'abstraction si vous le souhaitez.


0 commentaires

20
votes

Je recommanderais simplement une simple requête pour aller chercher toutes les lignes, triées par ID de catégorie. Sortiez la catégorie uniquement si sa valeur passe de la ligne précédente.

<?php

$stmt = $pdo-> query("SELECT * FROM `myTable` ORDER BY categoryID");

$current_cat = null;
while ($row = $stmt->fetch()) {
  if ($row["categoryID"] != $current_cat) {
    $current_cat = $row["categoryID"];
    echo "Category #{$current_cat}\n";
  }
  echo $row["productName"] . "\n";
}

?>


0 commentaires

8
votes

Cela devrait fonctionner: xxx pré>

la sortie que vous pouvez styler vous-même. Vous ajoutez simplement tout dans un tableau multidimensionnel avec l'identifiant de la catégorie comme des touches de premier niveau. P>

EDIT STRY>: le tableau résultant peut ressembler à ceci: p>

$categories = array(
    'cateogy_id_1' => array(
        1 => 'item_1',
        2 => 'item_2',
        ...
    ),
    'cateogy_id_2' => array(
        1 => 'item_1',
        2 => 'item_2',
        ...
    ),
    ....
);


0 commentaires

2
votes

Cette approche n'a pas besoin que les données soient triées par catégorie_id.

Vous pouvez utiliser php pour regrouper chaque catégorie dans un tableau imbriqué. Après cela, les données peuvent être facilement affichées dans une table, transmises à une bibliothèque de grape / graphique, etc ... xxx


0 commentaires

0
votes
$stmt = $dbConnection->prepare("SELECT exam_id, COUNT(report_id) FROM bug_report GROUP BY exam_id; ");
        //$stmt->bind_param('s',$exam_id); 
        $stmt->execute();
        $extract = $stmt->get_result();
        $count = $extract->num_rows;
        if($count){
            while($rows = $extract->fetch_assoc()){
                $exam_id = $rows["exam_id"];
                switch($exam_id){
                    case "jee_questions":
                        $jeeBugCount = $rows["COUNT(report_id)"];
                        break;
                    case "gate_questions":
                        $gateBugCount = $rows["COUNT(report_id)"];
                        break;
                }
            }   
        }

0 commentaires