J'ai un système de gestion de contenu qui contient une structure hiérarchique de catégories, avec des sous-catégories sujettes à différentes options d'ordonnancement à chaque niveau. Actuellement, cela est récupéré par une (assez grande) série de requêtes ... mais je tente d'accélérer les choses en utilisant une procédure stockée récursive. (Si je comprends bien, utiliser CTE serait le meilleur de tous, mais je ne suis pas sûr qu'il existe un moyen de le faire si la commande peut varier d'un niveau à l'autre.) Si je me trompe, veuillez me corriger. Donc, tout fonctionne bien ... sauf que je n'arrive pas à comprendre comment parcourir les enregistrements pour interroger les enfants de chaque catégorie que je trouve. J'ai essayé d'utiliser un curseur mais, encore une fois, il semble que la commande est un problème. (Et encore, corrigez-moi si je me trompe.)Sélection d'enregistrements pendant une procédure stockée récursive
Voici le code (qui est appelé à partir d'une procédure de parent qui crée la table temporaire):
BEGIN
SET NOCOUNT ON;
DECLARE @parent_new int, @custom_order_new varchar(1);
DECLARE @title varchar(255), @is_nav_hidden bit, @display int;
-- store the information about this category into the temp table
IF @parent > 0
BEGIN
INSERT INTO #CategoryListTemp SELECT DISTINCT c.id, c2c.id_parent, c.title, cp.id, c.page_order, null, c.is_published, cu.is_album, u.firstname, u.lastname, c.is_nav_hidden from categories_categories c2c, categories c LEFT JOIN categories_users cu ON c.id=cu.id_category LEFT JOIN users u ON cu.id_user=u.id LEFT JOIN categories_pages cp ON c.id=cp.id_category AND [email protected] where c2c.id_category=c.id and [email protected];
END
-- and then find out about its children
IF @custom_order='c' BEGIN
SELECT DISTINCT @parent_new = c.id, @custom_order_new = c.page_order, @title=c.title, @is_nav_hidden=c.is_nav_hidden from categories_categories c2c, categories c where c2c.id_category=c.id and [email protected] order by c.is_nav_hidden, c.title;
END
ELSE
BEGIN
SELECT DISTINCT @parent_new = c.id, @custom_order_new = c.page_order, @is_nav_hidden=c.is_nav_hidden, @display=c2c.display, @title=c.title from categories_categories c2c, categories c where c2c.id_category=c.id and [email protected] order by c.is_nav_hidden, c2c.display, c.title;
END
if @parent_new IS NOT NULL BEGIN
EXEC GetCategoryListData @id, @parent_new, @custom_order_new
END
END
Les pointeurs seraient très chaleureusement reçus. Merci beaucoup.
Impossible de lire cela. Vous avez besoin de sauts de ligne. Où est la clause FROM? À quoi vous joignez-vous? –