PDA

View Full Version : [SQL]Query per estrarre foglie da struttura ad albero


ilDave
11-05-2005, 15:31
Salve :)
Ho una tabella che contiene dei prodotti, organizzati ad albero: ho un campo "codice", che contiene il codice del prodotto, e il campo "codice_padre", che contiene il codice del padre, o 0 se il prodotto è alla radice.
Vorrei estrarre tutti i codici dei prodotti che sono foglie, ovvero che non hanno figli; penso quindi di dover fare una query che estrae tutti i record il cui "codice" non è "codice_padre" di alcun altro record.
Come posso fare? Utilizzo MySql 3.23, quindi non posso usare query annidate...
Grazie per l'aiuto :)

cionci
11-05-2005, 15:52
Bella cosa...mi sembra di averla già fatta...

Puoi usare le funzioni aggiuntive di mysql che gestiscono le variabili utente e quindi puoi fare due query ?

ilDave
11-05-2005, 16:16
In realtà ho risolto con uno script php che estrae tutti i codici e poi li cicla, cercando per ognuno di essi se sono upflag di altri record con un'altra query...
Lo script lancia tante query, una per record ovviamente, ma i record non sono moltissimi, e dato che mi serve solo un elenco di record da usare una volta e poi mai più va bene così...

Mi piacerebbe però sapere se si poteva fare anche con solo SQL... l'esame di basi di dati devo ancora farlo e vado un po' in crisi con le query più complesse :D

cionci
11-05-2005, 16:59
Con un sola query non si può fare (così ad occhio)...visto che non puoi usare le sottoquery e la INTERSECT...

Per farla puoi usare le user variables:

SELECT @a = '';

SELECT DISTINCT CONCAT_WS(',', @a, IDPadre) FROM Tabella;

SELECT * FROM Tabella WHERE ID NOT IN (@a);

In linea di massima è questo...ma non ho provato...

ilDave
13-05-2005, 09:37
Sì, così funziona, grazie mille per la dritta :D