Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 11h56   #1
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Par défaut Selectionner les entrées étant en relation.

Voilà ma table entreprises qui vient de légèrement souffrir !
Citation:
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 :
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 ?
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 12h19   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
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)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 13h15   #3
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 654
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 654
Points : 2 656
Points : 2 656
Bonjour,

Que veut dire ceci ?
Citation:
Mais ce n'est pas vraiment ça
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 13h33   #4
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Citation:
Envoyé par punkoff Voir le message
Bonjour,

Que veut dire ceci ?
J'ai trouvé où était mon erreur J'avais oublié la condition
Citation:
AND f1.id != f2.id
Merci de votre aide
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 13h53   #5
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Il doit quand même me manquer un truc car les valeurs parent se retrouve également dans enfant.
Citation:
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 ?
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h38   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 654
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 654
Points : 2 656
Points : 2 656
bonjour,

au vu de votre clause where ca me semble tout à fait logique.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h54   #7
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Citation:
Envoyé par punkoff Voir le message
bonjour,

au vu de votre clause where ca me semble tout à fait logique.
Oui ! Sans doute mais vous rajouteriez quoi à ma condition ?

Code :
SELECT f1.id AS PARENT, f2.id AS ENFANT FROM `entreprises` f1, `entreprises` f2 WHERE `f1`.`rcci` = `f2`.`rcci` AND `f1`.`id` != `f2`.`id`
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h56   #8
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 654
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 654
Points : 2 656
Points : 2 656
vous êtes concient que dans le cas actuel on ne peut distinguer qui est le père du fils vu que votre seule condition pour savoir si un lien de parenté existe est :

Code :
1
2
 
 `f1`.`rcci` = `f2`.`rcci`
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 14h58   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h50   #10
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
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 :
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 ?
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h01   #11
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Citation:
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 ?

Citation:
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 !

Citation:
Code :
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 :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 17h17   #12
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
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.
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h43.


 
 
 
 
Partenaires

Hébergement Web