SQL : delete [s/ une table] from [2 tables].. [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2007
-
 Conradson -
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

2 réponses

Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 952
Salut,

as-tu essayé les select imbriqués ?

DELETE * FROM Sortie_Comments WHERE idsortie IN (SELECT idsortie FROM sorties WHERE sorties.date <='$date');
6
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
5
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2007

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
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 952
Ca n'est malheureusement pas supporté par tous les SGBDR :-(

Mais content que ce soit le cas pour le tien :-)
Messages postés
5
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
21 octobre 2007
>
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020

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
Merci, c'est tout ce dont j'avais besoin !