cle etrangères et delete

Invité
Invité n'ayant pas de compte PHPfrance

29 déc. 2010, 19:29

bonsoir à tous ,

j ai un comportement que je ne comprends pas sur la manière de supprimer des données sur tables avec des foreign key (fk)
par ex pour une bdd de serie:

Code : Tout sélectionner

--table series-- idserie (pk) --table saisons-- idsaison (pk) idserie (fk idserie) saison_numero (unique idseries/saison_numero) --table episodes-- idepisode (pk) idserie (fk idserie) idsaison (fk idsaison) episode_numero
les actions onupdate et ondelete sont toutes sur cascade.

voila pour le shema rapide , donc en pratique si je veux supprimer les données d' une saison en faisant
delete from saison where idsaison = '54';

je pensais betement que cela allait me supprimer tous les episodes sur la table episode comportant l idsaison 54,
en fait cela me supprime tous les episodes de la série! #-o

si quelqun peut m'eclaire sur ce sujet? :P

bonnes fêtes ..... :mrgreen:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 déc. 2010, 20:02

Bonsoir,
je pensais betement que cela allait me supprimer tous les episodes sur la table episode comportant l idsaison 54,
en fait cela me supprime tous les episodes de la série! #-o
Est-ce que tu peux m'expliquer la différence entre les 2 phrases ?
Parce que, d'où je suis, j'ai l'impression que tu dis 2 fois la même chose :?

"Supprimer tout les épisodes de la série 54" reviens bien à "Supprimer tout les épisodes dont l'idserie est 54", non ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

29 déc. 2010, 20:20

salut

et bien en fait dans la table episodes tu peux avoir ces données:

Code : Tout sélectionner

idserie :14 idsaison:54 idepisode:1601 idserie: 14 idsaison: 54 idepisode: 1602 idserie: 14 idsaison:53 idepisode: 1500

ce ne sont pas les episodes de la serie que je veux supprimer mais les episodes de la saison :oops:

donc avec cette requete:

Code : Tout sélectionner

delete from saison where idsaison=54;
un affichage des données restantes pourrait me donner (avec les données au-dessus):

Code : Tout sélectionner

idserie: 14 idsaison:53 idepisode: 1500
en esperant avoir été plus clair :lol:

Invité
Invité n'ayant pas de compte PHPfrance

29 déc. 2010, 20:49

mouais, :priere:
4 heures la dessus, pour me rendre compte que dans la table episode, la cle etrangère idserie etait relié au champs idserie de la table saison et pas de la table serie |*()
du coup le comportement etait normal...

merci Zeus, ta question m' a bien guidée en fait :D
résolu

bonne fête à tous encore !!!!! :fete:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 déc. 2010, 21:44

merci Zeus, ta question m' a bien guidée en fait :D
Si tu savais combien de fois le fait de poser une simple question peut mettre la personne sur la piste ;)
Je n'aurais jamais pu t'aider, mais simplement en donnant un point de vue externe sur ton problème, j'ai pu te débloquer.

En gros, si tu bloques trop longtemps sur un problème qui te parait simple, va boire un café, prend l'air une heure et la solution va tomber toute seule parce que tu auras changé de perspective ;)

Et ... bonnes fêtes à toi aussi ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer