Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376

    Stampare dati con while

    Salute e buona Pasqua!

    Estraggo dei dati dalla tabella Prodotti con il classico while:
    Codice PHP:
     while ($row mysql_fetch_array($result)) {
    echo 
    $row['nomeprodotto'];

    La tabella Prodotti è in Join con la Tabella Commenti (tramite il campo ProdottoID) e quindi quando stampo i dati con while, se nella tabella Commenti ci sono, appunto, più commenti ad un singolo prodotto ecco che ottengo il nome prodotto duplicato per N volte.

    Hard disk 500GB, CommentoID 12
    Hard disk 500GB, CommentoID 15
    Hard disk 500GB, CommentoID 29
    Stampante Laser, CommentoID 92
    ...

    Come faccio ad avere, invece, una cosa del genere?
    Hard disk 500GB, CommentoID 12, 15, 29...
    Stampante Laser, CommentoID 92
    ...

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    per ottenere quel risultato con un'unica query non mi viene in mente niente (in realtà sono quasi convinto non si possa)
    però puoi fare una nuova query per ogni prodotto, inserendola nel while
    una cosa tipo questa
    Codice PHP:
    $result mysql_query("SELECT id_prodotto, nomeprodotto FROM prodotti");
    while (
    $row mysql_fetch_array($result)) { 
        echo 
    $row['nomeprodotto']; 
        
    $result_commenti mysql_query("SELECT id_commento, commento FROM commenti WHERE id_prodotto_commento = {$row['id_prodotto']}");
        while (
    $row_commento mysql_fetch_array($result_commenti) {
            echo 
    $row_commento['commento'];    
        }


  3. #3
    Originariamente inviato da clasku
    per ottenere quel risultato con un'unica query non mi viene in mente niente (in realtà sono quasi convinto non si possa)
    Certo che si puo', basta smettere di stampare da dentro il ciclo while e fare la cosa piu' corretta: mettere i dati in una struttura e stamparli dopo.

    Come fare in questo caso e' molto semplice, si crea un array usando il nome del prodotto come chiave e come valore un altro array a cui si incodano gli id dei commenti.

    Qualcosa del genere:
    Codice PHP:

    $data 
    = array();

    while ( 
    $row mysql_fetch_array($result) ) {
        
    $key $row['nomeprodotto'];

        
    $data[$key][] = $row['id_commento'];
    }

    print_r($data); 
    Fare una query per ogni prodotto e' un'idea pessima, il calo di performance all'aumentare del numero di prodotti e' vertiginoso. Le JOIN si usano proprio per evitare query di questo genere, che sono il piu' grave errore in termini di performance quando si interagisce con un database.

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    e hai ragione sulla parte di output dei dati, non avevo considerato l'opzione dell'array multidimensionale...

    io parlavo di ottenere quel risultato direttamente nella query, un resultset già pronto come diceva lui senza usare altre manipolazioni dei dati

  5. #5
    Originariamente inviato da clasku
    e hai ragione sulla parte di output dei dati, non avevo considerato l'opzione dell'array multidimensionale...
    E' un peccato perche' dovrebbe essere la prima cosa a venire in mente ad un programmatore PHP. La separazione tra estrazione/elaborazione dei dati e loro visualizzazione e' il concetto piu' importante da imparare se si vuole andare oltre echo "Hello World".

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    e dici bene, "ad un programmatore PHP"
    purtroppo la mia strada si è allontanata da tempo dalla programmazione "seria", ormai lo faccio per puro diletto/soluzione di problemi semplici e perdo di vista le possibilità più smart di coding

  7. #7
    Allora fai attenzione coi suggerimenti, il codice che hai postato puo' portare il tempo di esecuzione dello script da istantaneo a parecchi secondi.

    Se hai 1000 prodotti con una JOIN fai una query, con il tuo sistema fai mille e una query.

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ehm... sì... ok...
    fai una cosa va, cancella il mio post se credi, così evitiamo che qualcuno prenda spunto e si sovraccarichi il suo server locale sul quale sta studiando con tre record su una tabella e 10 nell'altra

    si è capito che ho scritto una cazzata perché non ho pensato troppo

  9. #9
    Va bene, allora scriviamo tutti le prime cazzate che ci vengono in mente, saranno sicuramente utilissime per chi ha bisogno di imparare. Tanto avra' solo pochi record, a che gli serve imparare a fare le cose per bene.

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    adesso non vorrei che tu stia travisando quanto ho scritto, ho già detto all'inizio che il mio suggerimento è sbagliato (e di molto anche, me ne rendo conto)

    direi di chiuderla qua, accetto la ramanzina (giustissima)

    scusa se ti ho fatto intervenire per "cazziarmi", sinceramente

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.