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 :

Est-ce que c'est possible en une seule requête?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Est-ce que c'est possible en une seule requête?
    Bonjour,

    Je suis un peu une buse en MySQL, et je ne sais pas si ce que je veux faire est possible avec une seule, ou plusieurs requêtes MySQL, ou s'il faut traiter les résultats après.

    Voilà, je veux récupérer dans 2 tables bugzilla (bugs, longdescs) les infos suivantes :

    bug_id, work_time, who, assigned_to, bug_when, SI who est égal à un id donné OU que who n'est pas égal à un cet id ET qu'il n'y a pas d'autre enregistrement correspondant à cet id, tout celà est groupé par bug_id, bug_day, donc il peut y avoir plusieurs résultats avec un bug_id identique.

    J'arrive à faire la première partie, je coince sur la seconde. Je pourrais le faire en 2 fois, et encore, j'ai du mal à voir.

    Je ne sais pas si c'est très clair comme ça, je suis dedans depuis 2 jours, dites moi si vous avez besoin de plus d'infos pour m'aider

    Merci,

    Gérald

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    un petit exemple stp

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Je vais essayer :

    bug_id bug_day work_time who assigned_to
    2370 2008-12-29 3.00 8 33
    2366 2008-12-26 0.00 5 15
    2366 2008-12-29 1.00 15 15
    2361 2008-12-22 0.00 2 15
    2361 2008-12-28 0.00 17 15
    2360 2008-12-22 0.00 2 15
    2358 2008-12-22 0.00 2 15
    2354 2008-12-19 0.00 33 33

    Dans cette table je veux récupérer les infos concernant l'id 15

    2366 2008-12-29 1.00 15 15
    2361 2008-12-22 0.00 2 15
    2360 2008-12-22 0.00 2 15
    2358 2008-12-22 0.00 2 15

    Donc pour le bug_id 2366, la ligne qui contient un who=15, pour les autres, une ligne, peut importe la valeur de who, et j'ignore les lignes dont le assigned_to est différent de 15.

    Précision utile, le format des tables (simplifié) :

    table bugs : bug_id, assigned_to

    table longdescs :
    bug_id, who, bug_when, work_time

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'ai comme dans l'idée qu'il faut faire mumuse avec les fameux JOIN... Je suis en train de tester ça, en suivant ce lien http://sqlpro.developpez.com/cours/sqlaz/jointures/ trouvé sur ce forum. Ca marche déjà mieux que ce que j'ai fait jusqu'à présent.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut précisions
    Si je comprends bien, ta première liste de données est la table SQL et la seconde est un exemple de résultat que tu veux obtenir. C'est bien ça ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Non, mon exemple est tout pourri en fait

    En fait j'ai plutôt :
    dans la table bugs :
    bug_id assigned_to
    2370 33
    2366 15
    2361 15
    2360 15
    2358 15
    2354 33

    la table longdescs
    bug_id when work_time who
    2370 2008-12-29 3.00 8
    2366 2008-12-26 0.00 5
    2366 2008-12-29 1.00 15
    2361 2008-12-22 0.00 2
    2361 2008-12-28 0.00 17
    2360 2008-12-22 0.00 2
    2358 2008-12-22 0.00 2
    2354 2008-12-19 0.00 33

    et je veux ça :
    2366 2008-12-29 1.00 15 15
    2361 2008-12-22 0.00 NULL 15
    2360 2008-12-22 0.00 NULL 15
    2358 2008-12-22 0.00 NULL 15

  7. #7
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut simple question
    Juste une question de curiosité comme ça en passant

    As-tu créé une clé étrangère et mis les moteurs en innoDB par ce que dans ton exemple, cela me semble plus judicieux.

    Ensuite, je confirme qu'il faut bien utiliser une jointure mais tu vas devoir créer des alias vu que tes noms de colonnes sont les mêmes dans les deux tables. Je te laisse la chercher pour l'instant.

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Citation Envoyé par geraldgg Voir le message
    J'ai comme dans l'idée qu'il faut faire mumuse avec les fameux JOIN...
    je dirais même jointure externe (left join, right join) si j'ai bien compris

  9. #9
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut
    Alors là Cybher t'a carrément donné l'indice final

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par david drapeau Voir le message
    Juste une question de curiosité comme ça en passant

    As-tu créé une clé étrangère et mis les moteurs en innoDB par ce que dans ton exemple, cela me semble plus judicieux.

    Ensuite, je confirme qu'il faut bien utiliser une jointure mais tu vas devoir créer des alias vu que tes noms de colonnes sont les mêmes dans les deux tables. Je te laisse la chercher pour l'instant.
    Euh... je ne sais pas, c'est bugzilla qui créé les tables, je préfère ne pas y toucher. Et j'ai mis des alias effectivement, mais ça, c'est pas trop dur

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par david drapeau Voir le message
    Alors là Cybher t'a carrément donné l'indice final
    Hof, j'ai trouvé avant l'indice en fait

    Voilà la requête que j'utilise, ça m'a l'air de fonctionner, jsuqu'à ce que je trouve le cas qui ne fonctionne pas :

    SELECT b.bug_id, DATE_FORMAT( ld.bug_when, '%Y-%m-%d' ) AS bug_day, SUM( ld.work_time ) AS work_time, ld.who, assigned_to
    FROM bugs b
    LEFT OUTER JOIN longdescs ld ON b.bug_id = ld.bug_id
    AND ( who =15 )
    WHERE ( assigned_to =15 )
    GROUP BY ld.who, b.bug_id, bug_day
    ORDER BY b.bug_id DESC , ld.who, bug_day

    et ça me donne un truc dans ce style :

    bug_id bug_day work_time who assigned_to
    2366 2008-12-29 1.00 15 15
    2361 NULL NULL NULL 15
    2360 NULL NULL NULL 15
    2358 NULL NULL NULL 15
    2349 NULL NULL NULL 15
    2348 2008-12-18 1.00 15 15
    2345 2008-12-18 0.00 15 15
    2336 NULL NULL NULL 15
    2329 2008-12-15 0.00 15 15

    qui correspond parfaitement à ce que je veux. Youpi!!

    Merci pour votre aide.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut
    C'est un plaisir de voir des gens trouver la solution par eux-même.

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

Discussions similaires

  1. Est-ce possible en une seule requête ?
    Par pc75 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/09/2013, 10h08
  2. Réponses: 2
    Dernier message: 04/12/2009, 20h12
  3. est-ce que python est ce que je cherche
    Par SILICONE dans le forum Général Python
    Réponses: 5
    Dernier message: 21/12/2007, 15h23
  4. [GD] Est-ce que c'est possible qu'une fonction tourne mieux sur Win et pas sur Linux
    Par nkki_nkki dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/07/2007, 18h34
  5. Est ce que c'est possible de télécharger ce forum génial ?
    Par dz_robotix dans le forum Evolutions du club
    Réponses: 2
    Dernier message: 11/09/2006, 16h12

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