Ho un disegno di legge di tabella di materiali che è impostato in questo modo:
voce - genitoreUsando query MySQL per attraversare le righe per fare un albero ricorsivo
Il risultato finale, quando visualizzo la distinta base è che viene visualizzato nel seguente modo:
item 1 - parent 0
item 2 - parent 1
item 3 - parent 1
Il risultato finale potrebbe anche essere a più livelli in questo modo:
item 3 - parent 0
item 4 - parent 3
item 76 - parent 3
E può andare avanti all'infinito:
item 76 - parent 0
item 46 - parent 76
item 46 - parent 0
item 25 - parent 46
In questo momento, mi sia appena ottenere 1 livello dal database:
SELECT * FROM bom WHERE parentId = $itemId (shorthand)
o tirare ogni riga della tabella e utilizzare la mia funzione ricorsiva di risolvere solo quelli di cui ho bisogno, ma questo è ovviamente inefficiente perché potrei aver bisogno solo di 10 righe, ma tiro 10.000 record. L'uscita della funzione ricorsiva sarà solo creare un albero come questo:
item 1
item 2
item 3
item 4
item 76
item 46
item 25
Tutto quello che so è che sto iniziando al punto 1. Articolo 5 potrebbe avere un genitore di 11; non devono andare in sequenza. Voglio ottenere tutti i rami figlio nell'albero. Come posso fare questa query in mysql?
Ottima procedura. Ma poi 'SELECT id, GetFamilyTree (id) FROM pctable;' genera un errore: _ERROR 1292 (22007): Valore DOUBLE errato troncato: '4,5'_. Ho provato a eseguire il debug, ma invano. Avresti qualche idea! Grazie – idok