Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128

    estrapolare una lista su una lista

    non sapevo che titolo dare
    ho un problemino.
    Ho tre tabelle
    utenti - gruppi - utente_gruppo

    la prima, raccoglie gli utenti logicamente
    la seconda, raccoglie i gruppi
    la terza, associa gli utenti ai gruppi

    esempio:
    UTENTI (id_utente - nickname)
    1 - andrea
    2 - marco
    3 - luca
    4 - giovanni
    5 - Francesco
    GRUPPI (id_gruppo - nome)
    1 - amministratore
    2 - moderatore
    UTENTE_GRUPPI (id_utente - id_gruppo)
    1 - 1
    2 - 2
    3 - 2
    4 - 2
    5 - 1

    Quindi in questo esempio dovrebbe venire fuori una lista dei gruppi dove sotto ogni gruppo la lista di ogni utente

    amministratore
    ----andrea
    ----francesco
    moderatore
    ----marco
    ----luca
    ----giovanni

    Di solito per una lista utilizzo una semplice query con dopo un while:

    Codice PHP:
    $sql "SELECT * FROM gruppi";
    $query mysql_query($sql);
    while (
    $row mysql_fetch_array($query)) {
    ...

    come genero un ulteriore lista all'interno di questa? thanks


    ps. spero di essermi spiegato :master:

  2. #2
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    a parte che non ho capito che lista vuoi creare, penso che dovresti utilizzare delle semplici JOIN nella query e fare tutto con un while..

  3. #3
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da brodik
    a parte che non ho capito che lista vuoi creare, penso che dovresti utilizzare delle semplici JOIN nella query e fare tutto con un while..
    mi riesci a fare un esempio allora?...
    la lista che voglio fare è questa:

    ho dei gruppi(amministratore, moderatore) e sotto ogni gruppo voglio stampare gli utenti che ci appartengono. l'esempio di poco fa mi sembrava esaustivo

    codice:
    esempio:
    UTENTI 
    (id_utente - nickname)
    1 - andrea
    2 - marco
    3 - luca
    4 - giovanni
    5 - Francesco
    GRUPPI
     (id_gruppo - nome)
    1 - amministratore
    2 - moderatore
    UTENTE_GRUPPI 
    (id_utente - id_gruppo)
    1 - 1
    2 - 2
    3 - 2
    4 - 2
    5 - 1
    
    Quindi in questo esempio dovrebbe venire fuori una lista dei gruppi dove sotto ogni gruppo la lista di ogni utente 
    
    amministratore
    ----andrea
    ----francesco
    moderatore
    ----marco
    ----luca
    ----giovanni
    dove associo l'id dell'utente all'id del gruppo.
    creare un elenco non è un problema.

    così creo l'elenco dei gruppi
    Codice PHP:
    $sql "SELECT * FROM gruppi"
    $query mysql_query($sql); 
    while (
    $row mysql_fetch_array($query)) { 

    echo 
    "$row[nome]
    "
    ;


    codice:
    amministratore
    moderatore
    il mio problema è che in questo elenco, sotto ogni gruppo vorrei stampare un ulteriore lista, cioè l'elenco degli utenti che ci appartengono e dovrebbe venire fuori così

    codice:
    amministratore
    ----andrea
    ----francesco
    moderatore
    ----marco
    ----luca
    ----giovanni
    ma non so come scrivere la query per stampare i gruppi e sotto ogni gruppo gli utenti

  4. #4
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    Codice PHP:
    $query mysql_query("SELECT * FROM gruppi"); 
    while (
    $row mysql_fetch_array($query)) { 

    print 
    $row["nome"];

    $query mysql_query("SELECT * FROM utente_gruppi WHERE id_gruppo = '$row["id"]'"); 
    while (
    $rowg mysql_fetch_array($query)) { 

    $query mysql_query("SELECT * FROM utenti WHERE id_utente = '$rowg["id_utente"]'"); 
    while (
    $rowu mysql_fetch_array($query)) { 

    print 
    "----".$rowu["nickname"];

    }

    }


    questo è per farti capire come dovrebbe funzionare..

    ottimizzata diventa

    Codice PHP:
    $query mysql_query("SELECT * FROM gruppi JOIN utente_gruppi ON gruppi.id_gruppo = utente_gruppi.id_gruppo JOIN utenti ON utenti.id_utente = utente_gruppi.id_utente ORDER BY gruppi.id_gruppo, utenti.id_utente ASC");
    $gruppo ""
    while (
    $row mysql_fetch_array($query)) { 

    if(
    $row["gruppi.nome"] != $gruppo){
    print 
    $row["gruppi.nome"];
    $gruppo $row["gruppi.nome"];
    }

    print 
    "----".$row["utenti.nickname"];




  5. #5
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    ricevo pagina bianca con solo "------------"

  6. #6
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    si scusa errore mio...

    ecco la versione corretta

    Codice PHP:
    <pre>
    <?php

    $db 
    mysql_connect("_________","____","______________") or die("Errore connessione");
    mysql_select_db("____"$db) or die("Errore DB");

    $query mysql_query("SELECT * FROM gruppi"); 
    while(
    $row mysql_fetch_array($query)){ 

        
    $id $row["id_gruppo"];
        
    $nome $row["nome"];

        print 
    $nome."
    "
    ;

        
    $query1 mysql_query("SELECT id_utente FROM utente_gruppi WHERE id_gruppo = '$id'"); 
        while(
    $rowg mysql_fetch_array($query1)){ 

            
    $idu $rowg["id_utente"];

            
    $query2 mysql_query("SELECT nickname FROM utenti WHERE id_utente = '$idu'"); 
            
    $rowu mysql_fetch_array($query2); 

            
    $username $rowu["nickname"];

            print 
    "----".$username."
    "
    ;

        }



    print 
    "_______________________________________________________________
    "
    ;

    $query mysql_query("SELECT * FROM gruppi JOIN utente_gruppi ON gruppi.id_gruppo = utente_gruppi.id_gruppo JOIN utenti ON utenti.id_utente = utente_gruppi.id_utente ORDER BY gruppi.id_gruppo, utenti.id_utente ASC");
    $gruppo ""
    while (
    $row mysql_fetch_array($query)) { 

    if(
    $row["nome"] != $gruppo){
    print 
    $row["nome"]."
    "
    ;
    $gruppo $row["nome"];
    }

    print 
    "----".$row["nickname"]."
    "
    ;


    }

    ?>
    </pre>

  7. #7
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Intanto grazie davvero per la disponibilità e per l'aiuto che mi stai dando...
    La parte prima di ___________________________________________ funziona bene, stampa tutti i gruppi e sotto ogni gruppo gli utenti che ci fanno parte.
    La parte al di sotto invece mi da un problemino... ti spiego.. io nella tabella utenti ho una colonna che si chiama "nome" come nella tabella gruppi e il codice anzichè stamparmi i nomi dei gruppi e al di sotto i membri che ci fanno parte, mi stampa il nome dell'utente e sotto il suo nickname.

    La parte al di sopra mi stampa

    amministratore
    ----andrea
    ----francesco
    moderatore
    ----marco
    ----luca
    ----giovanni

    La parte al di sotto

    NOME ANDREA
    ----andrea
    NOME FRANCESCO
    ----francesco
    NOME MARCO
    ----marco
    NOME LUCA
    ----luca
    NOME GIOVANNI
    ----giovanni

  8. #8
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765
    devi quindi impostare degli alias (AS) nella query altimenti vanno in conflitto i nomi dei campi...

  9. #9
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    Originariamente inviato da brodik
    devi quindi impostare degli alias (AS) nella query altimenti vanno in conflitto i nomi dei campi...
    scusa ma come li inserisco?...

    per dare un alias ad una colonna li devo mettere tra SELECT e FROM ma non mi va

  10. #10
    Utente di HTML.it L'avatar di torrone
    Registrato dal
    Apr 2006
    residenza
    Padova
    Messaggi
    1,128
    ok.. dopo vari tentativi.. c'è l'ho fatta

    Codice PHP:
    $query mysql_query("SELECT *, tw_utenti.nome AS nome_utente, tw_gruppi.nome AS nome_gruppo FROM tw_gruppi JOIN tw_utenti_gruppo ON tw_gruppi.id_gruppo = tw_utenti_gruppo.id_gruppo JOIN tw_utenti ON tw_utenti.id_utente = tw_utenti_gruppo.id_utente ORDER BY tw_gruppi.id_gruppo, tw_utenti.id_utente ASC"); 
    $gruppo "";  
    while (
    $row mysql_fetch_array($query)) {  

    if(
    $row[nome_gruppo] != $gruppo){ 
    print 
    $row[nome_gruppo]."

    "

    $gruppo $row[nome_gruppo]; 


    print 
    "----".$row["nickname"]."
    "





    ?> 
    intanto ti ringrazio davvero epr l'aiuto.. se ho altri problemi .. riscriverò.. sperando ancora nella tua disponibilità

    grazie ancora..

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.