Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di diaz
    Registrato dal
    Apr 2000
    residenza
    Berlin
    Messaggi
    379

    query ricorsiva per trovare id parent nella stessa tabella

    Ho una tabella che contiene dati per delle pagine dinamiche di un sito. Pagine possono essere "madri" ma anche figlie, figlie di figlie etc...

    questa è la struttura della tabella_pagine che ho in mente:

    tabella_pagine
    ---------------
    id_pagina
    testo
    contenuto
    ordine
    id_parent
    ---------------

    ora, io vorrei fare in modo che posso visualizzare su schermo tutte le pagine ma in maniera relativa alla pagina parente

    - pagina madre
    -- pagina figlia
    --- pagina figlia 2
    - altra pagina madre
    -- altra pagina figlia
    - etc....


    in mente ho uno schema simile, ma non so bene come metterlo in pratica per quanto riguarda il loop.
    Codice PHP:
        // crea un array vuoto chiamato scanarray, e buildarray
        // inizia a cercare le pagine con id_parent 0
            // effettua query
                // aggiungi a scannarray i nuovi risultati
                // rimuovi da scanarray la corrente chiave di ricerca

                // inserisce in buildarray i risultati

                // se scanarray è vuoto, esci dal loop

        // ripeti 
    E da quel giorno, se andavo da qualche parte, io ci andavo correndo!

    Tweeting @apphancer | Views my own – except when I say things I don’t really think.

  2. #2
    Allora... se vuoi visualizzare tutte le pagine ti conviene fare UNA query con tutto il contenuto della tabella e poi Leggere i dati in maniera ricorsiva.

    allora fai così:

    Codice PHP:
    //Includi i file per la connessione

    $db//Metti che sia il link al DB

    //A me interessano l'id della pagina, il nome e l'id_parent, ordinati secondi l'ordine indicato
    $query "SELECT id_pagina, testo, id_parent FROM tabella_pagine ORDER BY ordine ASC";

    $result mysql_query($query$db);

    $resultArray = array();

    while(
    $row mysql_fetch_assoc($result))
    {
       
    $resultArray[] = $row;
    }
    //Ora in resultArray ci sono tutte le pagine

    //Chiamo la mia funzione printPage su tutte le pagine ROOT
    for($i 0$i count($resultArray); $i++)
    {
       if(
    $resultArray[$i]['id_parent'] == null)
       {
          
    $resPage $resultArray[$i];
          unset(
    $resultArray[$i]);
          
    printPages($resPage);
       }
    }


    //Definisco una funzione che stampa la pagina passata e tutte le sue pagine figlie, al quale indico un numero di spazi da fare prima della pagina
    function printPages($page$spaces 0)
    {
       
    globals $resultArray;

       
    $id $page['id_pagina'];
       for(
    $i 0$i $spaces$i++)
          echo 
    "";
       echo 
    $page['testo'];
       
       foreach(
    $i 0$i count($resultArray); $i++)
       {
          if(
    $resultArray[$i]['id_parent'] == $id){
             
    /****
             * Questo è un fix per evitare che sia troppo lungo in caso di molte pagine, ma non sono sicuro che funzioni:
             * Dato che una volta stampati non mi interessa possano essere rivisti nella lista li rimuovo con un unset
             ****/
             
    $childPage $resultArray[$i];
             unset(
    $resultArray[$i]);
             
    printPages($childPage$spaces 1);
          }
       }

    Dovrebbe andare, l'unica cosa che non sono sicuro è se l'unset non cancelli completamente la voce, togliendola anche dalla variabile dove l'ho salvata. Provalo e, se non funziona, togli l'unset, ma questo riducerebbe le prestazioni se hai molte pagine.

  3. #3
    Utente di HTML.it L'avatar di diaz
    Registrato dal
    Apr 2000
    residenza
    Berlin
    Messaggi
    379
    sei stato gentilissimo!
    forse non trovavo la soluzione perché mi stavo sforzando troppo su quella mia idea che voleva risolvere il problema in maniera troppo semplice
    il tuo suggerimento è ottimo! domani lo provo, ma sono sicuro che andrà alla grande
    grazie mille
    E da quel giorno, se andavo da qualche parte, io ci andavo correndo!

    Tweeting @apphancer | Views my own – except when I say things I don’t really think.

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.