Ciao a tutti,
stiamo lavorando su un database che ha le seguenti tabelle:
- _catalogo
- _catalogo_categorie
la tabella _catalogo ha un campo id_categoria che fa riferimento alla tabella _catalogo_categorie.
la tabella _catalogo_categorie è fatta ad albero, ovvero ha un campo id_genitore che refenzia un altro id_categoria.
Ora, abbiamo bisogno di calcolare, dato un determinato id_categoria ID, la somma di:
- gli oggetti di _catalogo che abbiano ID come id_categoria
- gli oggetti di _catalogo che abbiamo come id_categoria un successore di ID
Ovviamente non sappiamo quale sia il livello di profondità che dobbiamo raggiungere per trovare le foglie, che varia di categoria in categoria.
Abbiamo usato questa procedura ma sembra andare in loop, sapete darci una mano??
Grazie!
codice:CREATE DEFINER=`root`@`192.168.1.2` PROCEDURE `_catalogo_calcolaTotaleProdottiRamoCategorie`( in idCategoria int , out totaleProdotti int ) BEGIN declare idFiglio int; declare subTotale int; DECLARE finito INT default 0; DECLARE cursore CURSOR FOR SELECT _catalogo_categorie.id FROM _catalogo_categorie WHERE _catalogo_categorie.id_genitore = idCategoria AND _catalogo_categorie.id > 0; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET finito = 1; set idFiglio = 0; set subTotale = 0; SELECT coalesce( count(_catalogo.id) , 0) FROM _catalogo WHERE _catalogo.id_categoria = idCategoria INTO totaleProdotti; OPEN cursore; ciclo: WHILE NOT finito DO FETCH cursore INTO idFiglio; CALL _catalogo_calcolaTotaleProdottiRamoCategorie( idFiglio , subTotale ); SELECT coalesce( subTotale , 0 ) + coalesce( totaleProdotti , 0 ) INTO totaleProdotti; END WHILE ciclo; END

Rispondi quotando
