Page 1 sur 1

Nombre d'enregistrement de 2 tables (jointure)...

Posté : 31 mai 2006, 17:05
par Legall
Salut all,

Je n'arrive pas à récuperer le nombre d'enregistrement d'une table imbriquée avec une autre.

J'ai 2 tables, une table "produit" avec un champ "id_cat" et une autre table "categorie" avec un champ du même nom "id_cat"

J'aurai aimé obtenir le nombre de prouits qui utilisent tel ou tel catégorie.

Par exemple; la categorie A est "utilisée" x fois etc...

Voici mon petit code :
$query = "SELECT * FROM $cat order by nom_cat"; 
$result = mysql_query($query) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
$i = 1; 
while ($data = mysql_fetch_assoc($result)) { 
ECHO $data['nom_cat']; 
$query_nb = mysql_query("SELECT COUNT(*) FROM $prduit, $cat WHERE $produit.id_cat=$cat.id_cat"); 
$row_nb = mysql_num_rows($query_nb); 
ECHO $row_nb; 
} 
Mais il me retourne le "1" pour chaque catégorie...

:(

Merci d'avance,

Legall

Posté : 31 mai 2006, 17:17
par sadeq
La réponse est en SQl et n'a rien à voir avec PHP :

Code : Tout sélectionner

SELECT c.id_cat, c.nom_cat, count(p.ref) as nb_produits FROM categorie c join produit p on c.id_cat = p.id_cat GROUP BY c.id_cat, c.nom_cat ORDER BY c.nom_cat;
En suite tu peux exécuter cette requête sous PHP et en exploiter le résultat qui est une grille de colonnes (id_cat, nom_cat et nb_produits)

jamais fait...

Posté : 31 mai 2006, 18:39
par Legall
Merci,

oula... cela me parait plutôt compliqué !

N'ayant jamais fait ce type de requette, j'aurai besoin d'aide pour l'afficheage des résultats... C'est possible ? Merci encore !

Je fait ceci mais rien ne se passe :
SELECT C.id_cat, COUNT(P.ref) AS nb_produits FROM $cat C JOIN $produits P ON C.id_cat = P.id_cat;
Legall

Posté : 01 juin 2006, 08:41
par sadeq
Mais pourquoi tu mets un $ avant les noms de tes tables.

Sinon pour ce qui est de la requête que je t'ai proposée, la récupération est la même que pour n'importe quelle requête :
Bien sût il faut adapter la requête à tes propres tables et donc il faut respecter les noms des tables et des champs de ta base.
  //Requête qui liste le nombre de produits par catégorie
   $sql = "SELECT c.id_cat, c.nom_cat, count(p.ref) as nb_produits 
FROM cat c join produits  p on c.id_cat = p.id_cat 
GROUP BY c.id_cat, c.nom_cat 
ORDER BY c.nom_cat";

   //Exécution de SQL
   $resultat = mysql_query($sql);
    //Récupèrer le résultat et l'afficher par exemple
    while ($ligne = mysql_fetch_array($resultat) ) {
          //afficher la ligne produit
          echo "<p>Catégorie: $ligne[id_cat] - $ligne[nom_cat]
                    <p>Nbre produits: $ligne[nb_produits]";
    }
La requête en fait, regroupe (GROUP BY) des produits par id_cat et nom_cat avant de compter leur nombre.
Et reclasse (ORDER BY) le résultat final par nom_cat par ordre alphabétique ascendant.

Si t'as encore des soucis, n'hésite pas d'envoyer la structure des tes tables catégories et produits.