Delete en cascade...

kik0une Messages postés 4 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 23 août 2004 - 2 août 2004 à 14:04
kik0une Messages postés 4 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 23 août 2004 - 2 août 2004 à 15:05
Bonjour!
Voilà, je développe en php/mysql un module de gestion d'article.
J'ai donc pour chaque article : un type d'article et un prix.
Donc forcément quand on supprime un type d'article de la base, il faut aussi supprimer les articles correpondants ainsi que les prix correspondant aux articles.
J'aimerais faire ça proprement, c'est à dire avec une seule requete.
J'ai regardé la doc sur mysql.com mais je trouve qu'elle n'est pas très claire et sans assez d'exemples.
Quelqu'un pourrait m'expliquer quelle structure doit avoir ma requete pour gérer ces 2 liens en cascade?
merci d'avance

3 réponses

cs_Psy Messages postés 88 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 3 mai 2005
2 août 2004 à 14:51
Salut kikOune !

Bon, alors à froid, je dirai :
Delete From table1,table2 where table1.type_article=valeurquivabien and table2.id_type_article=iddutypeasupprimer

Mais bon, là je suis sur à 1% donc à tester (sorry mais je viens de manger et l'envie d'une sieste me taquine ...)

Tiens moi au courant, je poursuivrais mon aide ;)
- Psy -
0
cs_roscovich Messages postés 23 Date d'inscription mardi 15 juin 2004 Statut Membre Dernière intervention 25 août 2004
2 août 2004 à 15:00
Pour information le DELETE multi-table ne fonctionnne qu'a partir de la version 4
et la syntaxe est la suivante
DELETE t1,t2 FROM t1,t2,t3 WHERE ***;
ici t3 n'est pas affecté par la suppression mais permet de servir dans les conditions du WHERE

gilles
0
kik0une Messages postés 4 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 23 août 2004
2 août 2004 à 15:05
Merci à vous 2 mais en fait j'ai fait 3 requetes, une pour chaque table, car je suis un peu en retard dans mon projet (je suis en stage...) dc je peux pas passer trop de temps la dessus.
Je met qd meme mon bout de code qui marche, au cas où qq'un se retrouverait ds le mm cas que moi.

//sélection des articles correspondant au type d'article à supprimer
$select="SELECT id_art, id_typ_art FROM article, type_article WHERE id_typ_art=typ_art_id AND id_typ_art=".$_POST["select"];
$req_sel=mysql_query($select);

//pour chaque article sélectionné
while($data_sel=mysql_fetch_array($req_sel))
{
//suppression de ses tarifs
$delete="DELETE FROM tarif_article WHERE art_id=".$data_sel["id_art"];
$req=mysql_query($delete) or die("erreur suppression tarif");
}
//si tout se passe bien
if($req)
{
echo "suppression des tarifs [OK]
";
//suppression des articles correspondant au type d'article à supprimer
$delete2="DELETE FROM article WHERE id_art=".$_POST["select"];
$req2=mysql_query($delete2) or die("erreur suppression article");
//si tout se passe bien
if($req2)
{
echo "suppression des articles [OK]
";
//suppression du type d'article
$delete3="DELETE FROM type_article WHERE id_typ_art=".$_POST["select"];
$req3=mysql_query($delete3) or die("erreur suppression type article");
if($req3)
echo "suppression du type d'article [OK]";
}
}

(dsl si le code est mal affiché, c pas pratique on peut pas prévisualiser ;-) )
0
Rejoignez-nous