Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema con INNER join 3 tabelle

    Ciao a tutti,

    Sto cercando di fare una prova di carrello e mi trovo di fronte a questo problema, ho tre tabelle, la tabella prodotti è la principale ed le altre, image - taglia, sono collegate da id_prodotto.
    Diciamo che ho 2 prodotti inseriti ed ognuno di loro ha 2 taglie e 2 image, a video dovrebbe stamparmi 2 righe in questo modo :

    prodotto 1 + menu tendina (taglia) + menu tendina (image)

    Utilizzando il codice di partenza che ho scritto mi vengono fuori tante righe quanti risultati,
    quindi
    prodotti 1 - taglia 1 - image 1
    prodotti 1 - taglia 2 - image 2
    prodotti 1 - taglia 1 - image 2
    prodotti 1 - taglia 2 - image 1

    prodotti 2 - taglia 1 - image 1
    prodotti 2 - taglia 2 - image 2
    prodotti 2 - taglia 1 - image 2
    prodotti 2 - taglia 2 - image 1


    codice:
    $sql="SELECT prodotti.*, image.*, taglia.* FROM prodotti 
    INNER JOIN image ON prodotti.id = image.id_prodotto 
    INNER JOIN taglia ON image.id_prodotto = taglia.id_prodotto 
    WHERE prodotti.id = '1'"; 
    $res = $db->query($sql);
    while ($f = $res->fetch())
    {
    echo "
    $f[nome] - $f[codice] > euro $f[prezzo] - $f[taglia] - $f[colore]
    
    <a href=\"carrello.php?action=aggiungi&id=$f[id]\">Aggiungi al carrello.</a>
    
    
    ";
    }
    
    
    
    CREATE TABLE `prodotti` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `nome` varchar(255) NOT NULL DEFAULT '',
      `codice` varchar(255) NOT NULL DEFAULT '',
      `prezzo` decimal(6,2) DEFAULT '0.00',
      `testo` longtext,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
    
    CREATE TABLE `image` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_prodotto` int(11) DEFAULT NULL,
      `colore` varchar(255) DEFAULT NULL,
      `foto` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    
    CREATE TABLE `taglia` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_prodotto` int(11) DEFAULT NULL,
      `taglia` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
    Come posso modificare il mio codice per avere i menu a tendina di taglie e image per ogni prodotto ?

    Grazie a tutti
    Informazione finanziaria: http://www.dominosolutions.it

  2. #2
    Non sono ferratissimo in SQL, ma secondo me devi effettuare una select sui prodotti e poi, per ogni prodotto recuperi prima le taglie e poi le immagini e popoli i menu a tendina.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente bannato L'avatar di Fronte
    Registrato dal
    Dec 2010
    Messaggi
    358
    Posso rispondere così ...

    codice:
    function tendina($ar,$nome,$valore_default=null)
    {// libreria tendina valore di default da popolare con query nella chiamata della funzione
    $html="<select name ='$nome'>";
     foreach ($ar as $chiave =>$valore) 
    { if ($chiave==$valore_default) 
    { 
    $selezionalo='selected'; }
     else { $selezionalo=''; }
     $html =$html . " <option value= '$chiave' $selezionalo>$valore</option> "; }
     $html =$html . "</select>"; return $html; }
    Quando fai la chiamata :

    $sql = "SELECT ,..nomi.... ";
    $nomi=query_assoc($sql,$DB);
    $html_nomi =tendina($nomi,'cat');

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.