Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    ricavare struttura ad albero da tabella sql

    Ciao,
    ho creato una tabella sql i cui campi principali sono:

    - ID
    - parentID
    - titolo
    - ...

    Il campo parentID serve per associare un ID ad un'altro ID, al fine di ricavare una struttura dei contenuti ad albero. Ad es.

    ID | parentID | titolo

    1 0 xxx
    4 0 bbb
    3 1 zzz
    5 1 eee
    6 1 www
    7 1 Nuovo
    9 7 Nuovo
    10 7 Nuovo
    12 5 Nuovo
    13 1 Nuovo
    17 16 Nuovo
    16 6 Nuovo
    18 4 Nuovo

    Darà la struttura:
    (la prima cifra è il parentID: "[parentID].[titolo] id[ID]")

    - 0.xxx id1
    -- 1.zzz id3
    -- 1.eee id5
    --- 5.Nuovo id12
    -- 1.www id6
    --- 6.Nuovo id16
    ---- 16.Nuovo id17
    -- 1.Nuovo id7
    --- 7.Nuovo id9
    --- 7.Nuovo id10
    -- 1.Nuovo id13
    - 0.bbb id4
    -- 4.Nuovo id18

    Ho evidenziato in rosso un esempio di associazione tra un ID e un partentID: chi ha il parentID=16 risulterà associato a chi ha l'ID (univoco) = 16... e così via..

    Questo risultato sono riuscito a stamparlo tramite 4 query php annidate:

    Codice PHP:
    <? 
    $q
    =mysql_query("SELECT * FROM tree WHERE parentID='0' ORDER BY parentID ASC");
    while(
    $r=mysql_fetch_array($q)){
    echo 
    "- ".$r[parentID].".".$r[titolo]." id".$r[ID]."
    "
    ;


    $q2=mysql_query("SELECT * FROM tree WHERE parentID='$r[ID]' ORDER BY parentID ASC");
    while(
    $r2=mysql_fetch_array($q2)){
    echo 
    "-- ".$r2[parentID].".".$r2[titolo]." id".$r2[ID]."
    "
    ;

    $q3=mysql_query("SELECT * FROM tree WHERE parentID='$r2[ID]' ORDER BY parentID ASC");
    while(
    $r3=mysql_fetch_array($q3)){
    echo 
    "--- ".$r3[parentID].".".$r3[titolo]." id".$r3[ID]."
    "
    ;


    $q4=mysql_query("SELECT * FROM tree WHERE parentID='$r3[ID]' ORDER BY parentID ASC");
    while(
    $r4=mysql_fetch_array($q4)){
    echo 
    "---- ".$r4[parentID].".".$r4[titolo]." id".$r4[ID]."
    "
    ;

    }
    #while

    }#while

    }#while


    }#while
    ?>

    Ma è un procedimento macchinoso e non va bene se i livelli della struttura aumentano o se elimino dal db un ID genitore.

    Sto cercando quindi un codice per ricavare dalla lettura del db l'albero in modo ricorsivo.

    Mi stava venendo in mente di usare gli array multidimensionali ma non riesco ad arrivare da nessuna parte.

    Qualcuno ha qualche idea o ha già visto un codice simile da qualche parte?

    Se non mi sono fatto capire, provo a rispiegarvi.

    Grazie raga,
    confido in voi !


  2. #2
    up!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.