Bonjour et bonnes fêtes

Nouveau sur ce forum, je me retrouve actuellement confronté à un problème qui me fait tourner en bourrique...

J'ai cette table (volontairement réduite au strict minimum)

CREATE TABLE categories (
id_cat bigint(20) NOT NULL auto_increment,
lib_cat varchar(45) NOT NULL default '',
parent_cat bigint(20) NOT NULL default '0'
PRIMARY KEY (id_cat)
) TYPE=MyISAM;

Cette structure me permet la création de catégories en cascade en utilisant le champ parent_id comme clé étrangère (id de la catégorie mère)

catégorie 1
-categorie 1.1
--categorie 1.1.1
--categorie 1.1.2
---categorie 1.1.2.1
---categorie 1.1.2.2
----categorie 1.1.2.2.1
--categorie 1.1.3
---categorie 1.1.3.1
-categorie 1.2
-categorie 1.3
categorie 2
etc..........

Mon souci se situe au niveau de la suppression d'une catégorie et tous ses enfants.

Si je souhaite supprimer la catégorie 1.1, je pourrai facilement supprimer les 1.1.1, 1.1.2 et 1.1.3, mais je planche complètement pour la suppression des 1.1.2.1, 1.1.2.2, 1.1.2.2.1 et 1.1.3.1 (les descendants indirects).

Ca fait plus d'une heure que je suis dessus, sans arriver à trouver le script correct qui me permettrait de supprimer proprement une catégorie et tous ses descendants, à l'aide de requêtes et de boucles en cascades. Sachant bien entendu qu'il serait possible d'avoir 50 générations dans une catégorie...

À l'aide de ce bout de code, je peux supprimer la génération descendante directe (j'ai plusieurs autres traitements dans le while, utilisant l'ID renvoyé), mais pas toutes les autres qu'il peut y avoir après...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
$rq1 = mysql_query("SELECT id_cat
				FROM categories
				WHERE parent_cat = $catcour");
while($res1 = mysql_fetch_array($rq1)) {
	mysql_query("DELETE FROM categories
				WHERE id_cat = $res1[0]");
	}
Si vous avez de quoi éclairer ma lanterne, ça serait formidable

Merci d'avance à tous !