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 :

Selectionner les entrées étant en relation.


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut Selectionner les entrées étant en relation.
    Voilà ma table entreprises qui vient de légèrement souffrir !
    id
    nom
    adresse
    telephone
    id_parent
    rcci
    responsable
    La relation id_parent a été cassé en raison d'une incohérence des valeurs qui datait depuis le début du projet et dont personne n'avait remarqué le problème.
    Donc les sauvegardes on peu s’asseoir dessus

    J'ai l'intention de rétablir les relations via un script PHP et heureusement j'ai un point commun entre l'entrée enfant et la parent. il s'agit du rcci et du responsable

    Je comptais obtenir un résultat via une requête SQL du style

    PARENT | ENFANT
    1 | 2
    1 | 3
    1 | 17
    4 | 2
    4 | 20
    6 | 8
    7 | 11

    Mais je n'arrive pas à générer une requête convenable. J'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT f1.id AS PARENT, f2.id AS ENFANT FROM `entreprises` f1, `entreprises` f2 WHERE `f1`.`rcci` = `f2`.`rcci`
    Mais ce n'est pas vraiment ça

    Pourriez-vous m'aider à générer la requête qui va bien ?

  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,
    Peut-on avoir le résultat d'un SHOW CREATE TABLE sur chacune des tables ?
    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
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Que veut dire ceci ?
    Mais ce n'est pas vraiment ça

  4. #4
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    Que veut dire ceci ?
    J'ai trouvé où était mon erreur J'avais oublié la condition
    AND f1.id != f2.id
    Merci de votre aide

  5. #5
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Il doit quand même me manquer un truc car les valeurs parent se retrouve également dans enfant.
    ENFANT PARENT
    10 9
    9 10
    12 11
    11 12
    124 121
    137 121
    121 124
    137 124
    136 132
    134 133
    133 134
    132 136
    121 137
    124 137
    215 214
    214 215
    229 217
    217 229
    234 233
    Un idée ?

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

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

    au vu de votre clause where ca me semble tout à fait logique.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    j'ai un point commun entre l'entrée enfant et la parent. il s'agit du rcci et du responsable
    Ceci veut-il dire que le rcci et le responsables sont communs à l'enfant et au parent ?
    Et que ce couple {rcci, responsable} caractérise de façon unique chaque famille parent + enfants ?

    Ce serait donc sur ces colonnes qu'il faudrait faire la jointure.
    Et au passage, les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  8. #8
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et au passage, les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre !
    Je ne suis pas de la branche, mais ce n'est pas vraiment une excuse. J'ai jamais bien compris le JOIN et LEFT JOIN. Mais si tu me dis que mon 'f1.id AS PARENT, f2.id AS ENFANT' correspond à un JOIN je vais devoir trouver une bon tuto.

    Sinon pour revenir a mon problème :
    Une autre chose différencie le parent de l'enfant elle me semblait logique donc je ne l'ai pas spécifié.
    Un enfant ne peut être affecté à un parent que si celui ci existe. Donc l'id de l'enfant est plus fort que celui de son parent. en suivant cette logique ceci devrait faire l'affaire.

    Quand pensez vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT f1.id AS PARENT, f2.id AS ENFANT FROM `entreprises` f1, `entreprises` f2 WHERE `f1`.`rcci` = `f2`.`rcci` AND `f1`.`id` != `f2`.`id` AND `f1`.`id` < `f2`.`id`
    Pour ma culture et celle des curieux qui liront ce POST. Ça donnerait quoi avec JOIN ?

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    je vais devoir trouver une bon tuto
    Il te suffit de suivre le lien que j'ai donné dans mon message et que tu as reproduit dans la citation.

    Dans ton premier message, tu dis que le point commun entre parent et enfant est le couple {rcci, responsable} mais dans tes requêtes tu ne traites que rcci. Cette seule colonne est suffisante pour identifier une famille ?

    PARENT | ENFANT
    1 | 2
    1 | 3
    1 | 17
    4 | 2
    4 | 20
    6 | 8
    7 | 11
    D'après ton exemple de données, un enfant peut avoir deux parents alors qu'il n'y a qu'une colonne pour référencer le parent dans la table !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND `f1`.`id` != `f2`.`id` AND `f1`.`id` < `f2`.`id`
    Si f1.id est inférieur à f2.id, f1.id est forcément différent de f2.id non ?

    En supposant que rcci soit suffisant comme colonne commune, ta requête correctement écrite donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT f1.id AS PARENT, f2.id AS ENFANT 
    FROM entreprises f1
    INNER JOIN entreprises f2 
    	ON f1.rcci = f2.rcci 
    	AND f1.id  < f2.id
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  10. #10
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 702
    Par défaut
    Merci, Ça doit marcher je testerais demain Matin.

    Sinon un enfant ne peut avoir qu'un seul parent Par contre un parent peux avoir plusieurs enfant.

    Encore merci de votre aide.

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

Discussions similaires

  1. [2.x] Les voters et la relation entre les entités
    Par hous04 dans le forum Symfony
    Réponses: 4
    Dernier message: 02/06/2014, 15h45
  2. Selectionner les entrées dont la date<dateNow
    Par arngrimur dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/10/2011, 15h45
  3. Je ne trouve pas la requete pour modifier les entrées...
    Par guttts dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/08/2005, 19h17
  4. Selectionner les date qui ont minimum une heure d'ecart
    Par uraxyd dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/07/2005, 13h39
  5. Réponses: 3
    Dernier message: 04/02/2004, 18h35

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