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

    [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. #2
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273

    Re: [SQL]Query per estrarre foglie da struttura ad albero

    [supersaibal]Originariamente inviato da ilDave
    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 [/supersaibal]
    nella sezione php ci sono due articoli che riguardano proprio la struttura gerarchica nel db.

    vale la pena di dargli un'occhiata (se il database è già fatto probabilmente non riesci ad adeguarti...)

    in alternativa quello che mi viene in mente (ma è molto macchinoso) è estarrre tutti gli id, poi tutti i padri
    fare una differenza fra i due array
    fare una ricerca con il risultato in base agli id.

    sono però un sacco di query diverse... se le foglie sono tante non è una grande idea...
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  3. #3
    Grazie per il riferimento all'articolo, lo leggerò con molto interesse

    Purtroppo la struttura del db non la posso toccare, me l'han dato in un certo modo e me lo devo tenere...

    Cmq ho risolto con un po' di codice:
    Codice PHP:
    $sql "select codice, nome from prodotti";
    $result mysql_query($sql);
    while (
    $rs mysql_fetch_assoc($result))
        {
        
    $sqlF "select codice from prodotti where codice_padre= '{$rs['codice']}'";
        
    $resultF mysql_query($sqlF);
        if (
    mysql_num_rows($resultF) == 0)
            {
            
    $out[$i]['codice'] = $rs['codice'];
            
    $out[$i]['nome'] = $rs['nome'];
            
    $i++;
            }
        }
        
    for (
    $k 0$k count($out); $k++)
        {
        print 
    "{$out[$k]['codice']} - {$out[$k]['nome']}
    "
    ;
        } 
    Fa' tante query, una per record, ma pazienza...

  4. #4
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    [supersaibal]Originariamente inviato da ilDave
    Grazie per il riferimento all'articolo, lo leggerò con molto interesse

    Purtroppo la struttura del db non la posso toccare, me l'han dato in un certo modo e me lo devo tenere...

    Cmq ho risolto con un po' di codice:
    Codice PHP:
    $sql "select codice, nome from prodotti";
    $result mysql_query($sql);
    while (
    $rs mysql_fetch_assoc($result))
        {
        
    $sqlF "select codice from prodotti where codice_padre= '{$rs['codice']}'";
        
    $resultF mysql_query($sqlF);
        if (
    mysql_num_rows($resultF) == 0)
            {
            
    $out[$i]['codice'] = $rs['codice'];
            
    $out[$i]['nome'] = $rs['nome'];
            
    $i++;
            }
        }
        
    for (
    $k 0$k count($out); $k++)
        {
        print 
    "{$out[$k]['codice']} - {$out[$k]['nome']}
    "
    ;
        } 
    Fa' tante query, una per record, ma pazienza...
    [/supersaibal]
    dipende un po' dal numero di record...
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

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.