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 :

Requete sur deux tables (débutant)


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut Requete sur deux tables (débutant)
    Bonjour,

    j'ai deux tables :
    table "parent" avec ces champs : parent.id, parent.prenom
    table "enfant" avec ces champs : enfant.id, enfant.parent_id, enfant.prenom

    je cherche a ecrire une requete sql qui me renvoie :

    la liste :
    des parents qui ont comme "prenom" LIKE %steph%
    ET
    des autres parents qui ont au moins un enfant qui a comme "prenom" LIKE %steph%

    J'ai beau tourner les probleme dans tous les sens, je n'arrive pas a le faire en une seule requete.

    Je precise que la liste des enfants ne m'interesse pas, c'est juste la liste des parents que je cherche à récupérer.

    Voila ce que j'ai essayé (parmis tant d'autres) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT
        parent.id
        , parent.prenom
        , enfant.id
        , enfant.prenom
    FROM
        parent, enfant
    WHERE (parent.prenom LIKE '%steph%')
        OR (enfant.prenom LIKE '%steph%')
    Bien sur ce code ne m'envoie pas la liste que je cherche...

    Si vous pourriez m'aiguiller sur la bonne voie...

    Merci beaucoup.

    Niko

  2. #2
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    En faisant une petite jointure plutôt qu'un produit cartésien, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
        parent.id, parent.prenom, enfant.id, enfant.prenom
    FROM  parent
    INNER JOIN  enfant ON parent.id=enfant.parent_id
    WHERE (parent.prenom LIKE '%steph%')
        OR (enfant.prenom LIKE '%steph%')
    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)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    Merci !!!!

    Il me reste cependant un cas auquel je n'avais pas pensé en écrivant le message. Cette réquete me renvoie bien la liste attendue, mais si un parent a plusieurs enfant LIKE '%steph%', j'ai des doublons "parents.id" dans les resultats.

    Y a t il un moyen d'éviter ca ?

    Encore un grand merci pour votre aide et votre rapidité !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 9
    Par défaut
    Si j'avais cherché avant de demander, j'aurais trouvé tout seul...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
        parent.id, parent.prenom, enfant.id, enfant.prenom
    FROM  parent
    INNER JOIN  enfant ON parent.id=enfant.parent_id
    WHERE (parent.prenom LIKE '%steph%')
        OR (enfant.prenom LIKE '%steph%')
    GROUP BY parent.id;
    Encore merci pour m'avoir débloqué la situation, et surtout j'ai appris quelquechose. MERCI.

  5. #5
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Il vaut mieux utiliser DISTINCT et réserver GROUP BY à l'utilisation des fonctions statistiques, d'autant que la norme SQL veut que toutes les colonnes qui ne font pas partie des calculs mais qui figurent dans le SELECT participent à la clause GROUP BY.
    MySQL est très permissif sur ce point, hélas.
    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)

Discussions similaires

  1. Syntaxe requete sur deux tables
    Par mosquitout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/03/2007, 20h31
  2. [SQL] requete sur deux tables
    Par yaka2 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/11/2006, 17h06
  3. Requete sur deux tables
    Par stefon dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 17/08/2006, 11h24
  4. requete sur deux tables
    Par rdams dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/04/2006, 14h42
  5. Requete sur deux tables
    Par ReaseT dans le forum ASP
    Réponses: 13
    Dernier message: 07/02/2005, 16h18

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