Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    118

    stampa tabella padre e figli

    ciao a tutti,

    come faccio a stampare in una tabella i dati di una tabella padre e quella dei relativi figli corrispondenti del tipo

    PAPERINO
    qui
    quo
    qua

    TOPOLINO
    tip
    tap

    ho due tabelle del tipo

    [CODE]
    CREATE TABLE 'figlio' (
    'idfiglio' int(11) NOT NULL AUTO_INCREMENT,
    'nominativo' varchar(45) DEFAULT NULL,
    'datanascita' date DEFAULT NULL,
    'padre_idpadre' int(11) NOT NULL,
    PRIMARY KEY ('idfiglio','padre_idpadre'),
    KEY 'fk_figlio_padre' ('padre_idpadre')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

    --
    -- Dump dei dati per la tabella 'figlio'
    --

    INSERT INTO 'figlio' VALUES(1, 'Luana', '2000-12-12', 1);
    INSERT IN

  2. #2
    io farei una SELECT con JOIN e con ORDER BY padre_idpadre
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  3. #3
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    usando solo il DB devi fare delle join sulla stessa tabella per ogni livello di parentela che vuoi estrarre, in alternativa puoi crearti delle funzioni ricorsive con php che estraggano nodi parenti/figli fin quando ce ne sono.

    Esiste ancora l'alternativa dell'aggiunta dei valori right e left per ogni nodo, è tutto spiegato qui

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    118
    scusate ma non so perchè il post non mi prende tutto il codice che voglio inserire..

    avevo fatto una cosa del genere per la parte relativa a php:

    Codice PHP:
    [PHP]
    $query = "SELECT figlio.nominativo, padre.nominativo 
                FROM figlio, padre
                  WHERE figlio.padre_idpadre = padre.idpadre";

    $risultato = mysql_query($query);

    if (!$risultato) {
        echo "Fallimento nell'esecuzione della query ($query) dal DB: " . mysql_error();
    }

    if (mysql_numrows($risultato)) {

        while ($riga = mysql_fetch_array($risultato)) {
        
    ?>

    <td><?php echo $riga['nominativo']; ?><td>

    <?php
    }
    }
    mysql_free_result($risultato);
    ?>
    il campo "nominativo" è presente in entrambe le tabelle ma stampo solo quelle del padre che hanno figli in comune. Io invece devo stampare il padre e i relativi figli...

    Razorblade, mi è chiara la logica della pagina che hai postato.. ma poi in php per recuperare i dati?


    [/PHP]

  5. #5
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Nel link che ho postato ci sono le query già pronte.

    Con php dovresti usare una funzione del genere ( link )

    Codice PHP:
    function getChildren($id=1) {
      
    $sql mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY lft ASC");
      echo 
    "<ul>";
      while(
    $row mysql_fetch_array($sql)) {
        echo 
    "[*][url='/{$row[']{$row['category_name']}[/url]";
        getChildren($row['
    category_id']);
      }
      echo "[/list]";
    }

    getChildren(); 
    La puoi adattare ai campi della tua tabella ed eventualmente fargli restituire un array piuttosto che stampare dei tag html.


    Ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    118
    Ho fatto questo

    Codice PHP:
    $sql mysql_query("SELECT * 
                FROM padre"
    );
     
    while(
    $row mysql_fetch_array($sql)) {
      echo 
    "[*]{$row['nominativo']}";
      
    $sql2 mysql_query("SELECT * FROM figlio WHERE padre.idpadre = '{$row['padre.idpadre']}'");
      if(
    mysql_num_rows($sql2) > 0)
      echo 
    "<ul>";
      while(
    $row2 mysql_fetch_array($sql2)) {
      echo 
    "[*]{$row2['nomefiglio']}[*]";
      }
      if(
    mysql_num_rows($sql2) > 0)
      echo 
    "[/list]";
      echo 
    "";
      } 
    ma stampa solo il padre.... la seconda query è come se non esistesse

  7. #7
    la condizione wehre della seconda query non ha senso;
    inoltre per queste cose devi eseguire una JOIN altrimenti fai millemila query..
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    118
    Originariamente inviato da oly1982
    la condizione wehre della seconda query non ha senso;
    inoltre per queste cose devi eseguire una JOIN altrimenti fai millemila query..
    ciao Oly,

    perchè non ha senso? ho recuperato i padri... e poi nella seconda query i figli che hanno quei padri...

    ho risolto cosi e funziona...:

    Codice PHP:

    $sql 
    mysql_query("SELECT * FROM padre");
     
    while(
    $row mysql_fetch_array($sql)) {
     
      echo 
    "[*]{$row['idpadre']} - {$row['nominativo']}";
      
      
    $sql2 mysql_query("SELECT nomefiglio FROM figlio where padre_idpadre={$row['idpadre']}");
      echo 
    "<ul>";
      while(
    $row2 mysql_fetch_array($sql2)) {
      echo 
    "[*]'$row2[nomefiglio]'";
      }
      echo 
    "[/list]";
      echo 
    "";
      
    }
    ?> 
    non so se è mlto corretta... non sono brava in php e sql... come avresti risolto diversamente?

    Gz,L.

  9. #9
    Un unica query come questa:
    codice:
    SELECT
    	padre.idpadre,
    	padre.nominativo,
    	figlio.nomefiglio
    FROM padre
    LEFT JOIN figlio ON figlio.padre_idpadre=padre.idpadre
    ORDER BY padre.idpadre
    che estrai gli stessi dati ma con un unica query!
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    118
    avevo già fatto una cosa del genere .. se vedi la mia terza risposta in questo post... il problema è che se faccio una cosa del genere:

    Codice PHP:
    $sql mysql_query("SELECT
        padre.idpadre,
        padre.nominativo,
        figlio.nomefiglio
    FROM padre
    LEFT JOIN figlio ON figlio.padre_idpadre=padre.idpadre
    ORDER BY padre.idpadre"
    );



    while(
    $row mysql_fetch_array($sql)) {
         echo 
    "{$row['nominativo']}";

    in php mi stampa tante volte il padre per quante volte è comune il figlio...

    quindi: paperino paperino paperino topolino topolino

    non riesco a far stampare una sola volta il padre e i figli associati...

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.