Visualizzazione dei risultati da 1 a 3 su 3

Discussione: LEFT Join

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    141

    LEFT Join

    Ho una tabella 'case' che ha chiave 'id_casa' e la tabella 'foto' che ha come chiave 'id_casa'.
    Il campo id_casa è usato per legare le due tabelle. Ogni casa può avere varie foto. Dovrei riuscire a stampare per ogni casa tutte le foto a essa associata.

    Ho provato con questa query:
    $query = "SELECT `case`.*, `foto`.* FROM `case`, `foto` where case.id_casa=foto.id_casa AND case.zona='aurelia'";
    Ma il problema è che se ho 5 foto per una singola casa mi stampa 5 volte la descrizione della casa ogni volta con una foto diversa.

    Ho capito che devo usare il left join ma faccio qualche errore di sintassi.

    Se provo a scrivere una query tipo questa mi da errore di sintassi:

    SELECT * FROM case as c LEFT JOIN foto as f ON c.id_casa = f.id_casa WHERE c.zona='aurelia';

    Come la devo scrivere la query?

  2. #2
    la sintassi con il join è la seguente

    codice:
    SELECT tabella1.campo1
    FROM tabella1 LEFT JOIN tabella2 on tabella1.campo2=tabella2.campo3
    WHERE ...
    http://embracesblog.mine.nu
    http://wiki.ubuntu-it.org/AndreaOlivato

  3. #3
    Utente di HTML.it L'avatar di Avalox
    Registrato dal
    Nov 2003
    Messaggi
    302
    Se vuoi stampare per ogni casa le foto associate, devi comunque avere più record relativi alla stessa casa, altrimenti come fai?

    Puoi utilizzare due metodi... uno che esegue una query per ogni casa estraendo le foto ad essa associate (dentro un ciclo for o while) e l'altro che tira fuori tutti i record (all'apparenza duplicati) mediante LEFT JOIN...

    per il primo metodo puoi fare in questo modo (scrivo di getto e non ho modo di provarlo...)
    Codice PHP:
    // recuperi la lista delle case
    $sql "SELECT * FROM case ORDER BY id_casa ASC";
    $result mysql_query($sql) or die("Errore nella query [$sql] - ".mysql_error());
    while( (
    $row mysql_fetch_assoc($result)) ) {

      
    // recuperi l'id della casa
      
    $id_casa $row['id_casa']; 
      
    // prepari la query per recuperare le foto relative a quella casa
      
    $sql_foto "SELECT * FROM foto WHERE casa_id = '$id_casa'";
      
    // esegui la query 
      
    $lista_foto mysql_query($sql_foto) or die("Errore nella query [$sql] - ".mysql_error());

      
    /**
      *  A questo punto puoi scorrere $lista_foto che contiene tutte le informazioni
      *  relative alle foto per la casa identificata da $id_casa.
      *  Quindi all'interno di questo ciclo prepari quello che devi visualizzare e lo visualizzi
      */  


    Per l'altra soluzione (JOIN), basta togliere as alle tabelle... ti riscrivo la query:
    Codice PHP:
    SELECT c.*, f.* 
    FROM case 
    LEFT JOIN foto f 
      ON c
    .id_casa f.id_casa 
    WHERE c
    .zona like 'aurelia'
    Spero ti possa servire.
    Fammi sapere

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 © 2024 vBulletin Solutions, Inc. All rights reserved.