SQL : delete [s/ une table] from [2 tables]..

Résolu/Fermé
Doudi911 Messages postés 5 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 21 octobre 2007 - 5 mai 2006 à 15:56
 Conradson - 14 avril 2008 à 10:12
Salut à tous.

J'ai un soucis pour faire une requete supression :
Je veux supprimer les enregistrement d'une table, mais la sélection se fait en liaison avec une autre table...
Je ne sais pas comment faire (sortie de mes select * from une table, en fait, je ne sais pas faire grand chose d'autre).

concretement :
la première table concerne des sorties (idsortie, nom, date...)
La seconde table concerne les commentaires faits par les visiteurs, et en rapport avec ces evenements. (idcomment, idsortie, idmembre, msg...)

Quand la sortie a eu lieu, je souhaite la conserver dans la table des sorties (car j'y ai un champ url pour le compte rendu), mais je souhaite supprimer tous les commentaires dans la table des commentaires.

j'ai donc une requete pour identifier s'il y a des evenements passés qui ont des commentaires. ça donne ça :
SELECT idcomment FROM sorties,sortie_comments WHERE sorties.date<='$date' AND sorties.idsortie=sortie_comments.idsortie

de là j'ai un mysql_num_rows qui m'indique s'il y a des commentaires à supprimer.

Mais je ne vois pas comment faire ma requete de suppression uniquement dans la table sortie_comments.

si je fais comme ceci :

DELETE FROM sortie_comments WHERE sorties.date<='$date' AND sorties.idsortie=sortie_comments.idsortie

SQL me le refuse car je ne lui indique pas au préalable (dans le "from") la table "sorties".

Mais si le lui indique, j'ai un peu peur qu'il m'efface aussi la sortie dans la table sortie.

Comment faire ?

Merci de votre aide ;)

Doudi
A voir également:

2 réponses

blux Messages postés 25977 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
5 mai 2006 à 16:30
Salut,

as-tu essayé les select imbriqués ?

DELETE * FROM Sortie_Comments WHERE idsortie IN (SELECT idsortie FROM sorties WHERE sorties.date <='$date');
6
Doudi911 Messages postés 5 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 21 octobre 2007
5 mai 2006 à 16:37
Whouahou....
Non, je n'avais pas essayé, et pour cause, je ne connaissais pas encore cette syntaxe :)
(bon OK, j'ai encore beaucoup à apprendre, ça se confirm !!!).

A lire, ça a l'air simple, et pour le moins explicite, ça devrait donc marcher sans problème.

MEGA GROS MERCI pour ça, c'est super sympa, merci merci merci ;-)

Bon je confirme, ça marche impec. (j'ai juste viré le '*' après DELETE).

Génial, ça c'est de la syntaxe qui me parle !

@+

Doudi
0
blux Messages postés 25977 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024 3 287
5 mai 2006 à 16:45
Ca n'est malheureusement pas supporté par tous les SGBDR :-(

Mais content que ce soit le cas pour le tien :-)
0
Doudi911 Messages postés 5 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 21 octobre 2007 > blux Messages postés 25977 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 avril 2024
5 mai 2006 à 16:56
je tourne sous easyphp (la ou j'ai fait le test), sinon le site est hébergé chez 1&1, mais j'ai pas encore testé chez eux.
J'ai trouvé une alternative qui a l'air de fonctionner aussi, en cherchant par ailleurs :

DELETE FROM sortie_comments WHERE EXISTS (SELECT * FROM sorties WHERE sorties.date<='$date' AND sortie_comments.idsortie=sorties.idsortie)

Mais ta technique est plus "parlante" pour le novice que je suis :)

Encore merci ;)

Doudi
0
Merci, c'est tout ce dont j'avais besoin !
0