• User

    Select Con Php-mysql

    Ciao a tutti sono nuovo del forum nonchè apprendista del php.

    Volevo chiedere un aiuto:

    Ho due tabelle in DB mysql : una degli utenti con quindi un ID univoco e una per le foto inviate da questi.

    La tabella utenti contiene questi campi: id_utente, username, password
    La tabella foto contiene i campi: **id_ foto, id_utente, nome_foto **

    supponiamo che per un'utente abbia chessò 10 foto nella tabella foto. E' possibile eseguire una sola query che mi visualizzi sia il record della tabella utente sia tutte le foto relative all'utente contenute nella tab. foto???

    Io sono riuscito a farlo facendo però 2 select. :arrabbiato:
    Cercavo però un modo per risparmiare risorse o fare tutto con una sola query

    E' possibile secondo voi?


  • User

    ciao!e benvenuto sul mitico forum di giorgiotave!
    da quanto ho capito la select che tu vorresti fare dovrebbe essere del tipo:

    select utenti.,foto.
    from utenti,foto
    where utenti.id_utente=foto.id_utente

    in questo modo visualizza una query in cui ogni riga è composta da tutte i campi di utenti e da tutti i campi di foto.
    Se non ti interessano tutti i campi basta mettere nella select i campi che vuoi visualizzare. Ad esempio utenti.username oppure foto.nome_foto.
    Ciao e fammi sapere se funziona.;);):D:D:)


  • User

    grazie sicilia24ore per l'aiuto.ebbene funziona. Purtroppo però il lavoro si è complicato non poco con l'aggiunta di altre 2 tabelle, Generi e annunci!! stò a impazzììì 😮

    Ti spiego cosa ho in mente: una pagina in cui visualizzo l'annuncio e la regione (in tab. annunci), l'utente (in tab. users), il nome del genere (in tab. generi), e infine tutte le foto in relazione all'annuncio (in tab. foto)
    sono riuscito a fare questa query:

    SELECT annunci.annuncio, annunci.regione, generi.genere, users.user, foto.foto
    FROM ((annunci LEFT JOIN foto ON annunci.annuncio_id=foto.annuncio_id) INNER JOIN generi ON annunci.gen_id=generi.gen_id) INNER JOIN users ON annunci.user_id=users.user_id
    WHERE annunci.annuncio_id=1;

    funziona!! e mi esce questo:
    +-------------------------------------------------+
    | **annuncio **| regione | genere | user | foto |
    +-------------------------------------------------+
    | vendo moto | lazio | moto | luca | 1.jpg |
    +-------------------------------------------------+
    | vendo moto | lazio | moto | luca | 2.jpg |
    +-------------------------------------------------+
    | vendo moto | lazio | moto | luca | 4.jpg

    (mammamia quant'è brutta stà tabella!)

    ora però:

    1. nella pagina PHP vorrei visualizzare una volta sola annuncio, user, genere e regione. E fare un ciclo invece per le foto. Come posso risolvere facendo una query?

    2. Pensate che l'uso di tutte queste join potrebbe compromettere le prestazioni del DB (rallentamenti ecc.)???


  • User

    secondo me dovresti reimpostare il db in questa maniera:
    1 tabellla users con i seguenti campi:
    id_utente,user,password
    2 tabella annunci con i seguenti campi:
    id_annuncio,id_utente,testo_annuncio,regione,genere,foto1,foto2,foto3,foto4

    così poi basta fare la seguente query:
    select testo_annuncio,regione,genere,foto1,foto2,foto3,foto4
    from users,annunci
    where user.id_utente=annunci.id_utente

    ed il gioco è fatto!
    troverai un record per ogni annuncio e all'jnterno di esso troverai tutte le foto!

    Se invece non vuoi un certo limite di foto da inserire ne riparliamo + tardi....eheh:D:D:D:):)


  • User

    avevo pensato anche io a una soluzione del genere ma no, la fregatura è proprio questa:

    non ci deve essere limite all'upload di foto. Cioè un utente se vuole può inviare anche 100 foto, essendo un sito di annunci fotografici. 😞


  • User

    Allora secondo devi fare così

    1. crei una tabella foto con i seguenti campi:
      id_foto, id_annuncio, percorso_foto

    2. tabella annunci
      id_annuncio,id_utente,testo_annuncio,regione,gener e,

    3. ti selezioni tutti gli annunci di un utente attraverso la query

    $query="select annunci.*
    from users,annunci
    where annunci.id_utente=users.id_utente";
    $esQuery=mysql_query($query);
    // crei una tabella //
    // in ogni colonna di una riga inserisci il contenuto dei campi degli annunci e // in quelle delle foto associate ad ogni foto.

    while($testQuery=mysql_fetch_array($esQuery))
    {

    //questi annunci li passi alla query che seleziona tutte le foto per ogni //annuncio
    $foto="select foto.*
    from foto
    where id_annuncio=".$testQuery['id_annuncio'];
    $esFoto=mysql_query($foto);

    while ($testFoto=mysql_fetch_array($esFoto))
    {
    // stampi tutte le foto per ogni annuncio

    }

    }

    spero di essere stato chiaro ed esaustivo:):):):):D:D:D!


  • User

    alla fine ci sono riuscito come avevo pensato all'inizio facendo 2 select

    Grazie 1000 cmq per l'aiuto :ciauz: