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 :

Sous requetes count : more than 1 row


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut Sous requetes count : more than 1 row
    Bonjour,

    j'ai une table project_categories du genre:
    id, name, parent_id ...

    et une table projects
    id, project_category ...

    j'ai besoin de ressortir le nombre de projets actifs pour chaque categories et dans le meme temps le nombre de projets dans une categorie parent

    j'ai ecrit la requetes suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t1.id, t1.name, t1.parent_id, 
    IFNULL( (
    SELECT COUNT( * ) 
    FROM projects AS t2
    WHERE (t2.project_category in (SELECT id FROM project_categories WHERE parent_id = t1.id) or t2.project_category = t1.id)
    AND t2.status =1
    GROUP BY t2.project_category ) , 0
    ) AS total_projects, t1._order
    FROM  `project_categories` AS t1
    ORDER BY t1.parent_id, t1.name;
    mais phpmyadmin me reponds:
    #1242 - Subquery returns more than 1 row

    si j'execute la sous requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT project_category, COUNT( * ) 
    FROM projects AS t2
    WHERE (t2.project_category in (SELECT id FROM project_categories WHERE parent_id = 1) or t2.project_category = 1)
    AND t2.status =1
    GROUP BY t2.project_category
    (j'ai fait expres de vous ajouter la colonne project_category ici pour mieux voir mon probleme, en prenant 1 comme parent_id, 7 et 8 ont comme parent_id 1)

    alors il me sort 2 lignes:
    project_category COUNT( * )
    7 1
    8 2

    Comment faire la pour qu'il me sorte 3 directement?

    attention si je fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT SUM( nbr ) AS total
    FROM (
    SELECT COUNT( * ) AS nbr
    FROM projects AS t2
    WHERE ( t2.project_category
    IN (SELECT id FROM project_categories WHERE parent_id =1 ) OR t2.project_category =1 )
    AND t2.status =1
    GROUP BY t2.project_category
    ) AS t4
    la il me sort bien 3 directement mais si je met cette sous requete dans la requete principale du haut alors la il me dit qu'il ne reconnait pas le champs t1.id

    Est il seulement possible de faire ce que je veux ici?

  2. #2
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Bonjour !

    Tu peux faire une jointure entre les projets & les catégories, ajouter un filtre where pour filtrer uniquement les projets actifs, et enfin regrouper par catégorie, ce qui devrait donner un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT cat.NAME, COUNT(*)
    FROM project_categories cat
    INNER JOIN project proj ON proj.project_category = cat.id
    WHERE proj.status = OK <--- a définir
    GROUP BY cat.id
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    Moi je veux récuperer le nombre de projet dans toutes les categories + le nombre totale de projets dans les sous categorie d'une categorie parent dans une meme query si c'est possible.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    j'ai une table project_categories du genre:
    id, name, parent_id ...

    et une table projects
    id, project_category ...
    L'emploi du pluriel prête à confusion ! J'avais cru que tu avais inversé la description, certes partielle, des deux tables !

    Il est d'usage de nommer les tables au singulier car elles sont issues d'entités du MCD elles mêmes issues de régles de gestion qui, correctement écrites, expriment clairement ce qui se passe pour une instance.

    Règle de gestion :
    Un projet appartient à une seule catégorie et une catégorie peut avoir plusieurs projets.

    MCD :
    projet -1,1----appartenir----0,n- categorie

    Tables :
    categorie (cat_id, cat_nom...)
    projet (prj_id, prj_id_categorie...)

    j'ai besoin de ressortir le nombre de projets actifs pour chaque categories et dans le meme temps le nombre de projets dans une categorie parent
    Il y a donc des catégories et des sous-catégories.
    S'il peut y avoir des sous-sous...sous-catégories avec un nombre d'étges variable, il faudrait utiliser des requêtes récursives, ce que ne connait pas MySQL.

    On va donc supposer qu'il n'y a que des sous-catégories.

    Moi je veux récuperer le nombre de projet dans toutes les categories + le nombre totale de projets dans les sous categorie d'une categorie parent dans une meme query si c'est possible.
    Tu veux un seul nombre par catégorie ? Le nombre total de projets par catégorie et leurs sous-catégories ?
    Ou bien séparément le nombre de projets par catégorie et dans une autre colonne le nombre de projets dans les sous-catégories des catégories ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2011, 10h38
  2. Réponses: 4
    Dernier message: 25/01/2007, 15h02
  3. Réponses: 3
    Dernier message: 08/12/2006, 17h28
  4. ORA-01427: single-row subquery returns more than one row
    Par hadid dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/10/2006, 15h35
  5. Subquery returns more than 1 row
    Par Mathelec dans le forum Requêtes
    Réponses: 12
    Dernier message: 03/08/2006, 14h25

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