[SQL]Requete select à l'intérieur d'un Delete

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

2fou
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 223
Inscription: Lun Juil 07, 2003 23:50

[SQL]Requete select à l'intérieur d'un Delete

Message le Mer Avr 26, 2006 11:00

Bonjour,

je souhaiterai faire un script de suppression de catégorie de produits.

Dans ma base de données, j'ai 3 tables :
- la table categorie : 1 champ idcat, et un champ intitulecat
- la table souscat : 1 champs idsouscat, un champ intitulessoucat, et numcat, l'id de la catégorie à laquelle cette sous catégorie est rattaché
- la table produit : 1 champ idproduit et 1 champ intituleproduit et numsouscat, l'id de la sous-catégorie à laquelle le produit est rattaché.

Sur ma page, je récupère $cat, l'id de la categorie que je veux supprimer.
Je voudrais donc maintenant faire une requete pour supprimer la catégorie choisie mais aussi les souscatégories et produits qui y sont rattachées.

Pour la suppression de la catégorie :
ça a l'air simple : delete from categorie where idcat = '$cat'

Pour la sous catégorie :
idem : delete from souscat where numcat = '$cat'

Parcontre pour la suppression des produits, c'est plus complexe.
il me faudrait je pense faire un Delete de :
SELECT * FROM souscat, produit WHERE numsouscat = idsouscat AND numcat ='$cat'

Savez vous comment faire?
Merci de votre aide

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Mer Avr 26, 2006 11:12

Si ton SGBD supporte les clés étrangères et les contraintes d'intégrité, il le fera tout seul à condition d'avoir stipuler la clause "ON DELETE CASCADE".

Sinon tu devras commencer par récupérer les id de tes sous catégories avant de les supprimer pour ensuite supprimer les produits avec ces id, le tout à l'intérieur d'une transaction de préférence.

2fou
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 223
Inscription: Lun Juil 07, 2003 23:50

Message le Mer Avr 26, 2006 13:31

Merci.

n'ayant pas trouvé comment fonctionne les Delete multitables, j'ai donc du faire plus simple.

// on récupère toutes les souscatégories rattachés à la catégorie selectionné
$q1="select * FROM souscat WHERE numcat ='$cat'";
$mr1=mysql_query($q1, $ml) or die("ERROR SQL :".mysql_error());

// pour chaque sous catégories trouvés
while ($data1 = mysql_fetch_array($mr1))
{
$souscat = $data1['idsouscat'];
// on supprime les produits rattachés à cette sous-catégories
$q2="DELETE FROM produit WHERE numsouscat='$souscat'";
$mr2=mysql_query($q2, $ml) or die("ERROR SQL :".mysql_error());
}

// on supprime les sous catégories rattaché à la catégorie
$q3="DELETE FROM souscat WHERE numcat ='$cat'";
$mr3=mysql_query($q3, $ml) or die("ERROR SQL :".mysql_error());

// enfin on supprime la catégorie
$q4="DELETE FROM categorie WHERE idcat ='$cat'";
$mr4=mysql_query($q4, $ml) or die("ERROR SQL :".mysql_error());


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités