IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problème sous requête


Sujet :

Requêtes MySQL

  1. #1
    darkloy
    Invité(e)
    Par défaut Problème sous requête
    Bonjour à tous,


    Question à deux sous ...

    J'ai une requête + sous requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *, (SELECT COUNT(*) FROM product AS prod WHERE category_id = cat.id)  as nbproduct 
    FROM category AS cat 
    WHERE  nbproduct  > 0 LIMIT 2
    J'ai l'erreur :
    Unknown column 'nbproduct' in 'where clause'

    Ça doit être tellement évident que ça ne me saute pas aux yeux ...

  2. #2
    darkloy
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *, (SELECT COUNT(*) as nbproduct  FROM product AS prod WHERE category_id = cat.id)  as nbproduct 
    FROM category AS cat 
    WHERE  prod.nbproduct  > 0 LIMIT 2
    Idem !

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Deux choses, d'abord merci de na pas raviver la guerre des étoiles,
    ensuite, les alias ne sont pas connus de MySQL avant la fin du SELECT, donc seulement après le WHERE.
    Je te conseille de t'en tirer comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT lesnomsdescolonneskivontbienplutotk*, (SELECT COUNT(*) AS nbproduct  FROM product AS prod WHERE category_id = cat.id)  AS nbproduct 
    FROM category AS cat 
    GROUP BY cat.id
    HAVING prod.nbproduct  > 0 
    LIMIT 2

  4. #4
    Membre régulier
    Homme Profil pro
    Data Analyste Senior
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data Analyste Senior
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    La sous-requête est-elle vraiment nécessaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT	 <liste colonnes autres>,
             cat.id, 
             COUNT(*) AS nbproduct
    FROM	 category AS cat INNER JOIN product AS prod
                                     ON Prod.category_id = cat.id 
    GROUP BY <liste colonnes autres>, 
             cat.id
    HAVING 	 COUNT(*) > 0 LIMIT 2;
    Par contre je m'interroge sur le "LIMIT 2".
    Quel est le but ? Si tu veux sélectionner les catégories qui ont le plus de produits, il faut rajouter une clause ORDER BY. La requête devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT	 <liste colonnes autres>,
             cat.id, 
             COUNT(*) AS nbproduct
    FROM	 category AS cat INNER JOIN product AS prod
                                     ON Prod.category_id = cat.id 
    GROUP BY <liste colonnes autres>, 
             cat.id
    ORDER BY COUNT(*) DESC
    HAVING 	 COUNT(*) > 0 LIMIT 2;

  5. #5
    darkloy
    Invité(e)
    Par défaut
    Wouaw, de retour sur mon pc, merci pour votre aide messieurs !!
    Disons que pour les jointures, quand j'ai commencé Sql ça m'effrayais rapidement. Et encore un peu maintenant
    Je ne veux aucunement raviver la guerre des étoiles, c'est juste pour rendre plus clair mon exemple de requête Je n'utilise jamais d'étoiles (ou rare cas ou je dois vraiment récupérer tous les champs !)

    Deux bons exemples !


    J'avais oublié l'ami "HAVING"

    Merci beaucoup, j'ai pas mal rouillé sous sql et le retour est un peu difficile sur des choses basiques...

  6. #6
    darkloy
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	$mysqlRequest = $this->DB->query(
    					"SELECT	 prod.id, prod.name, prod.pictureUrl, prod.description, prod.price,
    							 cat.id, 
    							 COUNT(*) AS nbproduct
    					FROM	 category AS cat INNER JOIN product AS prod
    													 ON prod.category_id = cat.id 
    					WHERE (category_id = ".(int)$requestAry["catId"]."	AND subcategory_id = 0) OR subcategory_id =".(int)$requestAry["catId"].
    					" GROUP BY prod.id, prod.name, prod.pictureUrl, prod.description, prod.price,
    							 cat.id
    					HAVING 	 COUNT(*) > 0");

    Nickel !! Merci encore à vous deux et bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sous-requête
    Par Yooo84 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 06/09/2013, 17h57
  2. Problème sous-requête complexe
    Par Soucmic dans le forum Développement
    Réponses: 11
    Dernier message: 02/05/2013, 08h51
  3. Problème sous-requête MAX et COUNT
    Par grafistolage dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/07/2010, 09h08
  4. Problème Sous-Requête
    Par STEF_1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2006, 13h12
  5. problème sous-requête SQL et order by
    Par aguest dans le forum Requêtes
    Réponses: 10
    Dernier message: 26/12/2005, 23h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo