Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 21h16   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
Par défaut ordre des requetes ?

Bonjour !

voila le but de mon code est d'afficher toutes les catégorie de ma boutique
nom et image ca, ça marche!
et d'afficher le nb d'article que contient chaque catégories
et c'est là que ça déconne!!!
ca ne m'affiche qu'une seule catégorie

je dois avec un pb d'ordre dans mon code ou autre

merci beaucoup

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
	$reponse = $bdd->query("SELECT * 
					FROM boutique_categorie
					WHERE etat = 0
					ORDER BY nom
					DESC
					") or die(print_r($bdd->errorInfo())); //requete
	// On fait une boucle pour lister tout ce que contient la table :
 
	while ($donnees = $reponse->fetch())//mysql_fetch_array, transforme les données en vrac de la table mysql, en une variable ordonnée en tableau (array)
	{
	echo'
	<div class="categorie-boutique">
		<h3>'.$donnees['nom'].'</h3>';
 
		//je compte le nb d'entrée pour chaque catégories
		$id = $donnees['id_categorie'];
		$reponse = $bdd->query("SELECT COUNT(*) AS nbre_entrees FROM boutique WHERE idCategorie = $id") or die(print_r($bdd->errorInfo())); //requete
		$donnees2 = $reponse->fetch();//mysql_fetch_array, transforme les données en vrac de la table mysql, en une variable ordonnée en tableau (array)
		{
		echo'<p>'.$donnees2['nbre_entrees'].'</p>';
		}
	echo'	
		<img src="images/uploads-categorie-boutique/'.$donnees['id_categorie'].'.jpg" alt="'.$donnees['nom'].'">
	</div>
	';
	}
	$reponse->closeCursor(); // deconnexion de la BDD PHP5
?>
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 21h26   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonsoir.

une boucle unique avec jointure est vivement conseillée dans ton cas de figure
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 23h25   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
tu veux dire en une seule requette avec jointure entre mes tables
plus un count?
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 23h33   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
en effet
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2010, 23h41   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
je suis en train d'essayer et j'ai du mal avec tous ces concepts mélangés
avec ma requete j'en suis là :
Code :
1
2
3
4
5
6
7
8
$reponse = $bdd->query("SELECT * 
FROM boutique
LEFT JOIN boutique_categorie
ON boutique.idCategorie = boutique_categorie.id_categorie
WHERE boutique_categorie.etat = 0
ORDER BY nom
DESC
") or die(print_r($bdd->errorInfo())); //requete
mais je ne vois pas comment dans un premier temps lister mes categories puis compter combien d'articles elles contiennent?
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 23h48   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
il faut que tu fasses une sous requête. A vu de nez :

Code sql :
1
2
3
4
5
6
7
8
9
 
SELECT nom, COUNT(*) AS nbre_entrees FROM (
    SELECT * FROM boutique
    LEFT JOIN boutique_categorie
    ON boutique.idCategorie = boutique_categorie.id_categorie
    WHERE boutique_categorie.etat = 0
)
GROUP BY nom
ORDER BY nom DESC
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2010, 23h54   #7
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
bon ok j'y cogite de suite
en gros tu me conseils de les grouper par catégorie et ensuite de compter?
sinon pourquoi mon code du début ne marche pas même s'il est moins optimisé il me paraissait juste?
merci
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 00h01   #8
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
c'est logique, tu fais un count() sur à priori un enregistrement qui doit être unique puisque filtré sur l'id donc tu ramènes toujours 1.

Sinon quel type de relation lie boutique et boutique_categorie ? 1-n et 1-n ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2010, 00h07   #9
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
1) l'enregistrement unique, tu parles de mes article groupé par catégorie, puis comptés?

2)oui
la table boutique est liée par sa colonne idCategorie
a la table boutique_categorie et sa colonne id_categorie
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 00h10   #10
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
En fait, je te demande si un id de boutique peut se retrouver plusieurs fois dans boutique_categorie et si un id de boutique_categorie peut se retrouver plusieurs fois dans boutique ? Si c'est le cas, tu dois faire une table d'association entre boutique et boutique_categorie si ce n'est pas fait déjà

EDIT:

je parle de cette requête :

Code sql :
1
2
 
SELECT COUNT(*) AS nbre_entrees FROM boutique WHERE idCategorie = $id

-> ton where te ramène 1 seule ligne donc ton count(), qui au passage devrait avoir un group by associé, te ramène forcément une seule ligne aussi

EDIT2: à priori avec ce que tu viens de me dire, oublie cela ton idCategorie peut se trouver plusieurs fois dans boutique
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/12/2010, 00h25   #11
Candidat au titre de Membre du Club
 
Inscription : avril 2010
Messages : 136
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 136
Points : 14
Points : 14
une catégorie peut avoir plusieurs articles
mais un articles ne peut être que dans une seule catégorie
donc pas besoin de table associative

oui mon where me ramène une seule ligne mais avant je lui ait dit de lister toutes mes catégories donc normalement a chaque fois qu'il affiche catégorie il devait ensuite affiché le nombre d'article correspondant à chaque catégorie affichée...non?
artichaudd est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h11.


 
 
 
 
Partenaires

Hébergement Web