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 :

Utiliser une seule requête plutôt que deux


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut Utiliser une seule requête plutôt que deux
    Bonjour,

    J'aimerais savoir s'il est possible d'optimiser une requête que j'utilise actuellement.

    J'ai une table CLIENT{int id, string Nom, string Prenom, int Personne, int Type}

    La rubrique "Personne" correspond en fait à l' "Id" d'un autre client.

    Dans ma requête je voudrais la liste de tous les clients qui sont désignés comme "Personne" d'un autre client dont le "Type" a une valeur donnée.

    Exemple :

    CLIENT {1, DUPOND, JEAN, "", 1}
    CLIENT {2, PIERRE, JACQUES, 1, 2}
    CLIENT {3, DURAND, JEAN, 1, 2}
    CLIENT {4, PAUL, CLAUDE, 1, 1}
    CLIENT {5, PONT, CLAIRE, 3, 2}

    Je voudrais donc les informations de DUPOND JEAN et de DURAND JEAN car leur "id" sont dans les rubriques "Personne" d'autres clients de type 2.

    Actuellement je fais une première requête qui me donne les "Id" de tous les clients qui sont dans la rubrique "personne" des clients de type 2. Puis une autre requête de sélection pour chaque client qui est ressorti de la première requête pour obtenir ses informations.

    Merci à tous ceux qui auront pris le temps de lire mon post;

    EDIT : C'est bien Durand Jean que je veux et non PONT Claire!
    Google est ton ami !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    regardez du côté de la clause EXISTS

  3. #3
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Bonjour,

    J'essaye de comprendre ton sujet mais quelque chose me chiffonne.

    Je ne comprends pas dans ton exemple pourquoi tu veux les informations de Claire PONT. Je ne vois pas son id (5) dans le champ "personne" d'un autre client contrairement à ce que tu dis.

  4. #4
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    Effectivement je me suis trompé de nom dans mon exemple. Je viens d'éditer mon post pour corriger.
    Google est ton ami !

  5. #5
    Membre confirmé Avatar de saymoneu
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 505
    Points
    505
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Nom, Prenom
    FROM `clients`
    WHERE id
    IN (
    SELECT Personne
    FROM clients
    WHERE Type =2
    )
    Ca devrait être ok avec ça non?

  6. #6
    Membre averti Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Points : 368
    Points
    368
    Par défaut
    Impec!!!!
    Je n'avais pas pensé à cette manière de procédé.

    Encore merci.
    Google est ton ami !

  7. #7
    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
    MySQL semblant préférer les jointures aux sous-requêtes j'aurais plutôt choisi cette requête
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT c2.Nom, c2.Prenom
    FROM `clients` c1
    INNER JOIN `clients` c2 ON c1.Personne=c2.id
    WHERE c1.Type = 2
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/09/2010, 17h51
  2. Deux COUNT dans une seule requête
    Par aya02 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/07/2010, 10h17
  3. Réponses: 4
    Dernier message: 21/02/2010, 12h39
  4. [Oracle] Deux COUNT dans une seule requête
    Par EvilJajuka dans le forum Débuter
    Réponses: 5
    Dernier message: 30/09/2009, 11h00
  5. Est-ce que c'est possible en une seule requête?
    Par geraldgg dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/12/2008, 18h44

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