Requête SQL

Fermé
nity - Modifié par nity le 2/07/2011 à 19:39
 nity - 3 juil. 2011 à 17:44
Bonjour,

J'ai besoin d'une âme charitable pour me dépatouiller d'un problème que je n'arrive pas à résoudre :$

j'ai deux tables :
produit : produit.id_produit, produit.nom, produit.id_marque etc...
marque : marque.id_marque, marque.nom, marque.description.. etc.

J'aimerai pouvoir compter le nombre de produits qui appartiennent à telle marque afin de pouvoir calculer mon nombre de pages. Malheureusement, j'arrive pas à faire ce count !

Voici ma requête :
$marqueChoisie = Philipps; 

$req_compteur = "SELECT COUNT(DISTINCT id_produit) AS nbre_entrees FROM produit LEFT JOIN marque ON produit.id_marque = marque.id_marque WHERE produit.id_categorie=".$categorieChoisie." AND produit.visible=1 AND marque.nom_marque=".$marqueChoisie." ";   
$result = mysql_query($req_compteur) or die (mysql_error()); 
$compteur=mysql_fetch_row($result); 
$total = $compteur[0];  
echo $total; 


ça me sort une erreur : Unknown column 'Philipps' in 'where clause'
Et si je rajoute ma table marque dans mon FROM, ça me sort : Not unique table/alias: 'marque'

Grrr. !!

J'avoue être bloqué. Où sont mes erreurs ?

Merci beaucoup !



4 réponses

Bonjour,

Ton message Unknown column 'Philipps' in 'where clause' signifie qu'il ne connaît pas le champ Philipps.
Je suppose que c'est normal, parce que tu n'as pas de champ Philipps. Pour toi, c'est une valeur.

C'est une erreur classique. Pour mysql, un mot qui n'est pas entre quotes (simples ou doubles) c'est un nom de champ, pas une valeur.
Quand dans ta requête tu as WHERE nom_marque = Philipps, il cherche les enregistrements pour lesquels les champs nom_marque et Philipps sont égaux.
Quand dans ta requête tu as WHERE nom_marque = 'Philipps', il cherche les enregistrements pour lesquels le champ nom_marque contient le texte Philipps .
Il suffit d'ajouter des simples quotes

$req_compteur = "SELECT COUNT(DISTINCT id_produit) AS nbre_entrees FROM produit LEFT JOIN marque ON produit.id_marque = marque.id_marque WHERE produit.id_categorie=".$categorieChoisie." AND produit.visible=1 AND marque.nom_marque='".$marqueChoisie."'";

Il faut faire cette modification pour tous les champs qui contiennent un texte (pas utile pour les nombres, car un nombre ne peut pas être pris pour un nom de champ.
1
Bonjour,

Merci d'avoir pris le temps de me répondre, c'est très gentil à vous.

J'ai rajouté les simples quotes comme souhaité, l'erreur n'est maintenant plus la même. J'obtiens ceci : Not unique table/alias: 'marque'.
Est-ce un problème de jointure ?

Merci
0
Bonjour,

Peux-tu redonner la requête telle qu'elle est maintenant ?
0
$req_compteur = "SELECT COUNT(DISTINCT id_produit) AS nbre_entrees FROM produit LEFT JOIN marque ON produit.id_marque = marque.id_marque WHERE produit.id_categorie=".$categorieChoisie." AND produit.visible=1 AND marque.id_marque=$marqueChoisie ";
$result = mysql_query($req_compteur) or die (mysql_error());
$compteur=mysql_fetch_row($result);
$total = $compteur[0];

Cela fonctionne !
Merci :D

j'en ai profité pour traiter mes marques par ID au lieu d'une varchar. Merci encore !
Bonne fin de weekend.
0