SQL : delete [s/ une table] from [2 tables]..
Résolu
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 -
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
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:
- Delete avec jointure
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
- Sql query download - Télécharger - Gestion de données
2 réponses
blux
Messages postés
27117
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
3 septembre 2025
3 359
5 mai 2006 à 16:30
5 mai 2006 à 16:30
Salut,
as-tu essayé les select imbriqués ?
as-tu essayé les select imbriqués ?
DELETE * FROM Sortie_Comments WHERE idsortie IN (SELECT idsortie FROM sorties WHERE sorties.date <='$date');
5 mai 2006 à 16:37
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
5 mai 2006 à 16:45
Mais content que ce soit le cas pour le tien :-)
5 mai 2006 à 16:56
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