Scusate il terzo messaggio consecutivo, ma ho risolto in un altro modo (magari a qualcuno interessa ;)).
Ho risolto con l'Adjacency List Model, utilizzando i campi fid e pid (parent id):
SELECT t1.name AS lev1, t1.disporder AS order1,
t2.name as lev2, t2.disporder AS order2,
t3.name as lev3, t3.disporder AS order3,
t4.name as lev4, t4.disporder AS order4,
t5.name as lev5, t5.disporder AS order5,
t6.name as lev6, t6.disporder AS order6
FROM mybb_forums AS t1
LEFT JOIN mybb_forums AS t2 ON t2.pid = t1.fid
LEFT JOIN mybb_forums AS t3 ON t3.pid = t2.fid
LEFT JOIN mybb_forums AS t4 ON t4.pid = t3.fid
LEFT JOIN mybb_forums AS t5 ON t5.pid = t4.fid
LEFT JOIN mybb_forums AS t6 ON t6.pid = t5.fid
WHERE t1.fid = 6 AND t2.fid != 7
ORDER BY order2,order3,order4,order5,order6
``` ```
CONFIGURAZIONE DEL SITO 1 Home 10 Galleria Immagini 10 NULL NULL NULL NULL NULL NULL
CONFIGURAZIONE DEL SITO 1 Home 10 Multimedia 20 NULL NULL NULL NULL NULL NULL
CONFIGURAZIONE DEL SITO 1 Home 10 Mappa del sito 30 Test 1 NULL NULL NULL NULL
CONFIGURAZIONE DEL SITO 1 News 20 News - Korona 1 NULL NULL NULL NULL NULL NULL
CONFIGURAZIONE DEL SITO 1 News 20 News - Queen 1 Test news 1 blabla 1 bleble 1
CONFIGURAZIONE DEL SITO 1 Concerti 30 Concerti passati 1 NULL NULL NULL NULL NULL NULL
CONFIGURAZIONE DEL SITO 1 Concerti 30 Concerti futuri 1 NULL NULL NULL NULL NULL NULL
Come vedete ogni riga ha dei "blocchi" (lev_i - order_i ), che, tranne per quanto riguarda il primo blocco di ogni riga, corrispondono ai rami dell'albero. Ci sono tanti blocchi quanto la profondità massima dell'albero.
Scorro tutte le righe, e per ogni riga scorro tutti i blocchi (tranne quelli impostati a NULL), e ogni blocco lo aggiungo in coda ad un array (se non è stato già aggiunto), ottenendo così il risultato cercato (che riesco a tradurre in una lista annidata):
home / gall img / multimedia / mappa / test / news etc...
Lo svantaggio è che con questa tecnica devo usare tanti left join quanto è la profondità massima dell'albero; per questo mi serve fare prima un'altra query e generare la query principale col php. La profondità massima dell'albero la prendo da:
SELECT *
FROM mybb_forums
WHERE parentlist LIKE "%,6,%"
ORDER BY parentlist ASC
Per ogni riga conto il numero di elementi della parentlist, e prendo il massimo e il minimo di tutto il risultato. Profondità massima = max - min +1 (calcolata tramite php). Il risultato finale è questo:
Home - Order: 10
Galleria Immagini - Order: 10
Multimedia - Order: 20
Mappa del sito - Order: 30
Test - Order: 1
News - Order: 20
News - Korona - Order: 1
News - Queen - Order: 1
Test news - Order: 1
blabla - Order: 1
bleble - Order: 1
Concerti - Order: 30
Concerti passati - Order: 1
Concerti futuri - Order: 1