Meerder LEFT JOINS werkt niet.

Status
Niet open voor verdere reacties.

Woutertjuh88

Terugkerende gebruiker
Lid geworden
20 nov 2005
Berichten
3.532
Hallo allemaal!!

Ik ben bezig met een kleine webshop maar Het lukt me niet om 3 tabellen te koppellen met elkaar. Wie weet wat ik fout doe?

Het resultaat wat ik krijg is:

een tabel met alleen de naam, brouwer, prijs (welliswaar zonder euroteken en zonder komma (terwijl ik deze wel toegevoegd met CONCAT en ROUND)). De voorraad krijg ik dus niet.


PHP:
//`bier__voorraad`       = `id_bier`, `voorraad`
//`bier__prijs`      = `id_bier`, `inkoop__prijs`, `verkoop__prijs`, `winst__marge`
//`bier__bier`      = `id`, `naam`, `brouwer`, `type`, `gisting`, `perc`


$sql = "SELECT id, `naam`, `brouwer`, CONCAT('€ ', ROUND(`inkoop__prijs`, 2)) AS inkoop__prijs, CONCAT('€ ', ROUND(`verkoop__prijs`, 2)) AS verkoop__prijs, CONCAT(ROUND(`winst__marge`, 2), ' %') AS winst__marge, `inkoop__prijs`, `verkoop__prijs`,`winst__marge`
                  FROM bier__bier
                  LEFT JOIN bier__prijs ON bier__prijs.id_bier = bier__bier.id 
                  LEFT JOIN bier__voorraad ON bier__voorraad.id_bier = bier__bier.id
                  ORDER BY id; ";   
            $res  = mysql_query ($sql, $db);
            
            //SQL foutcontrole
            if(!$res)
            {
               print "Fout in:<br>".$sql;
               exit();
            }
            
            $htm  = "";
            $htm .= "<table >";
            $htm .= "<tr class='tabel_kop' >";
               $htm .= "<td>Naam</td>";
               $htm .= "<td>Brouwer</td>";
               $htm .= "<td>Prijs</td>";
               $htm .= "<td>Voorraad</td>";
               $htm .= "<td>Bestel</td>";
            $htm .= "</tr>";
            while($rij = mysql_fetch_assoc($res))
            {
               $htm .= "<tr class='tabel_cel'>";
                  $htm .= "<td>".utf8_encode($rij["naam"])."</td>";
                  $htm .= "<td>".utf8_encode($rij["brouwer"])."</td>";
                  $htm .= "<td>".$rij["verkoop__prijs"]."</td>";
                  $htm .= "<td>".$rij["voorraad"]."</td>";
                  $htm .= "<td><input type='TEXT' size=1 name='aantal[]'> </td>";
      
               $htm .= "</tr>";
            }
            $htm .= "</table>";
                  echo "<div style='height:500px; overflow:auto;' >";
                     echo $htm;
                  echo "</div>";
                  echo "<input type='submit' value='Bestellen' name='button_opslaan'>";
 
OPGELOST!! heb voorraad niet geselecteerd!!! en zie ook dat ik dubbelen stukken er in heb zitten:S
 
Die backticks kun je beter uit je query halen. Schiet je niets mee op en is heel foutgevoelig. Daarnaast zie ik geen foutafhandeling in je code, ook niet bijzonder handig.

Verder; gebruik je hier wel de juiste JOIN? Het is dan opgelost, maar LEFT JOIN is langzamer dan INNER JOIN, dus gebruik LEFT alleen als je ook echt LEFT nodig hebt.
 
SvU

De foutmeldingen heb ik er net hiervoor uitgehaald. Die stonden er wel in namelijk. Maar zodra het werkt haal ik gelijk de foutmeldingen er uit(vind ik zelf overzichtelijker).
Bedankt voor je reactie in iedergeval!
 
Normaal gesproken werkt men met een config file waarin een een boolean staat dat aangeeft of het programma zich in een debugmodus bevindt. Zo ja -> foutmelding laten zien, zo nee -> niet laten zien, maar wel de gebruiker vertellen dat er iets niet goed is.

Veel werk, maar wel zo handig. Als er nu een fout op je site zit moet je die foutafhandeling er weer apart in bouwen. Niet erg handig..


Overigens was m'n opmerking over de verschillende JOINs misschien nog wel belangrijker.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan