|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2000
Città: Grugliasco, Torino
Messaggi: 175
|
[SQL]Query per estrarre foglie da struttura ad albero
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 ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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 ? Ultima modifica di cionci : 11-05-2005 alle 15:55. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2000
Città: Grugliasco, Torino
Messaggi: 175
|
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 ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:31.