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 :

un problème de sous-requête


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut un problème de sous-requête
    Bonjour,
    On y est mes premiers pas sur le forum !!
    Je viens chercher de l'aide après de nombreuses recherches vaines et un mal de tête pas possible.
    J'ai donc une requête avec une sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT com.nom_commune, 
    SEC_TO_TIME(SUM((SELECT TIME_TO_SEC(inter.tps_activite) FROM atl_intervention inter where inter.atl_activite_id_activite=1))) as surveillance, SEC_TO_TIME(SUM((SELECT TIME_TO_SEC(inter.tps_activite) FROM atl_intervention inter where inter.atl_activite_id_activite=10))) as antiadulte
    FROM atl_intervention inter, atl_commune com
    WHERE inter.atl_commune_id_commune = com.id_commune
    AND inter.date_intervention <= '2011-06-30' AND inter.date_intervention >='2011-06-01' AND com.code_dep = '17'
    GROUP BY com.id_commune
    et bien sûr quand je teste la requête dans mon phpmyadmin, j'ai le message suivant: #1242 - Subquery returns more than 1 row
    ah ah j'suis sûre qu'on vous l'a jamais faite celle-là.
    Bon, donc j'ai d'abord vu qu'il pouvait s'agir d'un problème de version..ouais!!
    Ensuite, j'ai vu qu'on pouvait transformer une sous-requête en requête, et alors je suis perdue

    Quelqu'un a la solution ??

    Merci

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Pourquoi utiliser une sous requete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
    	com.nom_commune, 
    	SEC_TO_TIME(SUM( CASE WHEN inter.atl_activite_id_activite=1 THEN inter.tps_activite ELSE 0 END)) as surveillance
     	SEC_TO_TIME(SUM( CASE WHEN inter.atl_activite_id_activite=10 THEN inter.tps_activite ELSE 0 END)) antiadulte
    FROM 
    	atl_intervention inter 
    INNER JOIN
    	atl_commune com
    ON	(inter.atl_commune_id_commune = com.id_commune)
    WHERE 
    	inter.date_intervention <= '2011-06-30' 
    	AND inter.date_intervention >='2011-06-01' 
    	AND com.code_dep = '17'
    GROUP BY com.id_commune
    Ne fonctionne t il pas ?

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 019
    Points : 23 713
    Points
    23 713
    Par défaut
    Et vous pouvez même remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE 
    	inter.date_intervention <= '2011-06-30' 
    	AND inter.date_intervention >='2011-06-01'
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE 
    	inter.date_intervention BETWEEN '2011-06-01' AND '2011-06-30'
    Ce qui sera plus performant.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par ced Voir le message
    Et vous pouvez même remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE 
    	inter.date_intervention <= '2011-06-30' 
    	AND inter.date_intervention >='2011-06-01'
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE 
    	inter.date_intervention BETWEEN '2011-06-01' AND '2011-06-30'
    Ce qui sera plus performant.
    ah bon ?
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 019
    Points : 23 713
    Points
    23 713
    Par défaut
    Voir le tutoriel : http://sqlpro.developpez.com/cours/optimiser/#L9, transformation n°7...
    Dans BETWEEN, les bornes sont incluses.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Yanika_bzh
    ah bon ?
    Ben d'après SQLPro, oui. Mais il précise qu'il faut quand même tester les transformations qu'il donne. En tout cas, cette transformation utilisant BETWEEN à au moins le mérite de rendre la requête plus claire.

    Citation Envoyé par Yanika_bzh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INNER JOIN
        atl_commune com
    ON    (inter.atl_commune_id_commune = com.id_commune)
    Pendant que j'y suis, inutile de mettre la condition de jointure entre parenthèses !
    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 !

  7. #7
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    @Cinephil : La mise entre parenthèse n'affectant en rien la syntaxe de l'instruction, je préfère la garder... C'est un reliquat de ma méthode de développement au cours de ma carrière. Elle me permet de bien différencier la condition de jointure de la syntaxe de jointure (dans le but par exemple de génération automatique de documentation de sources).

    En ce qui concerne le between, il serait intéressant d'analyser le plan d’exécution.

    En tout cas, de mémoire, ce n'est pas le cas sur un moteur SYBASE 12.5x
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  8. #8
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Vous êtes génialissimes !!! lol
    Merci yanika_bzh, tu m'as enlevé une grosse épine du pied !!
    J'ai cependant ajouté quelques modif' au code que tu m'as envoyé et ça marche!!
    je le rebascule du coup pour ceux qui auraient le même problème que moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT com.nom_commune, 
    SEC_TO_TIME(SUM( TIME_TO_SEC (CASE WHEN inter.atl_activite_id_activite=1 THEN inter.tps_activite ELSE 0 END))) AS surveillance,
    SEC_TO_TIME(SUM( TIME_TO_SEC (CASE WHEN inter.atl_activite_id_activite=10 THEN inter.tps_activite ELSE 0 END))) AS antiadulte
    FROM atl_intervention inter 
    INNER JOIN atl_commune com ON inter.atl_commune_id_commune = com.id_commune
    WHERE inter.date_intervention <= '2011-06-30' 
    AND inter.date_intervention >='2011-06-01' 
    AND com.code_dep = '17'
    GROUP BY com.id_commune
    encore merci de prendre de votre temps pour les novices comme moi !!

  9. #9
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    pourquoi quand je le mets dans mon php, ça ne marche pas?
    ça met : undefined

  10. #10
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    regardez vos log
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  11. #11
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    c'est à dire ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Points : 83
    Points
    83
    Par défaut
    Le code PHP utilisé nous serait d'un grand secours pour t'aider.

  13. #13
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    eh voilà,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function get_activite_byDep_byDate($code_dep, $date_debut, $date_fin)
    {
      $sql = "
     
              SELECT com.nom_commune, 
              SEC_TO_TIME(SUM(TIME_TO_SEC(inter.tps_prospection))) as tps_prospection, SEC_TO_TIME(SUM(TIME_TO_SEC(inter.tps_traitement))) as tps_traitement, SEC_TO_TIME(SUM(TIME_TO_SEC(inter.tps_controle))) as tps_controle, SUM(inter.quantite_produit) as quantite_produit,
              SEC_TO_TIME(SUM( TIME_TO_SEC (CASE WHEN inter.atl_activite_id_activite=1 THEN inter.tps_activite ELSE 0 END))) AS surveillance,
              SEC_TO_TIME(SUM( TIME_TO_SEC (CASE WHEN inter.atl_activite_id_activite=10 THEN inter.tps_activite ELSE 0 END))) AS antiadulte,
              SEC_TO_TIME(SUM( TIME_TO_SEC (CASE WHEN inter.atl_activite_id_activite=11 THEN inter.tps_activite ELSE 0 END))) AS urbain
              FROM atl_intervention inter 
              INNER JOIN atl_commune com ON (inter.atl_commune_id_commune = com.id_commune)
              WHERE inter.date_intervention <= '$date_fin' AND inter.date_intervention >='$date_debut' 
              AND com.code_dep = '$code_dep'
              GROUP BY com.id_commune
            ";
     
      $mysql = new base_mysql();
      //$mysql->base_Debug(true);
      $mysql->base_Open();
      $mysql->base_Query($sql);
      $mysql->base_Close();
     
      $retour = array();
      while ($row = $mysql->base_Fetch_Assoc()) {
        array_push($retour, $row);
      }
     
      return $retour;
    }

  14. #14
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    c'est bon, j'ai trouvé, cela venait de la requête mais de mon code pour générer un tableau où mettre les résultats.
    encore merci

  15. #15
    Membre à l'essai
    Femme Profil pro
    chargée de mission SIG
    Inscrit en
    Juillet 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : chargée de mission SIG
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    cela NE venait PAS de la requête... punaise, vivement le w-e !!
    bye bye

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

Discussions similaires

  1. Problème de sous requête (retour d'une seule valeur)
    Par ero-sennin dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/06/2006, 11h12
  2. Problème de sous-requêtes
    Par R'SKaP dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/05/2006, 19h39
  3. Problème de sous requête
    Par espadon1 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/05/2006, 15h20
  4. Problème de sous requête
    Par Draiwn dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/11/2005, 01h43

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