while loop blijft doorgaan

  • Onderwerp starter Onderwerp starter Jors
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Jors

Gebruiker
Lid geworden
1 okt 2006
Berichten
142
Goedendag,

wederom een vraag. Ditmaal over het weergeven van een INNER JOIN query die ik dacht goed in elkaar gezet te hebben. Echter, wat er gebeurt is dat alle gevonden records niet 1 maar meerdere malen weergegeven worden. Ik kan echter niet vinden waar het fout gaat in mijn code, wat mij verbaasd omdat ik dezelfde code ook al een aantal maal voor andere doeleinden heb gebruikt.

Hier gaat het om:

PHP:
$sqlprijs = mysql_query("SELECT TestTable.ID, orders.P_Id, orders.prijspp, orders.ordergr FROM TestTable INNER JOIN orders ON '$id'=orders.P_Id");

 while ($row = mysql_fetch_array($sqlprijs)) 
	 {
	 $ordergr = $row['ordergr'];
	 $prijs = $row['prijspp'];
	 echo $ordergr."<br />";
	 echo $prijs;
	 }

Waarschijnlijk is de oplossing weer heel voor de hand liggend, maak ik kom er ff niet uit.

//Edit: alle gevonden resultaten worden 8x weergegeven ipv 1.
 
Laatst bewerkt:
Dan klopt er waarschijnlijk iets niet met de join die je maakt.
 
Nou, hij laat wel alleen de records uit tabel 'orders' zien die bij het gekozen id horen, alleen hij laat ze 8 keer zien omdat er 8 records in de tabel TestTable zitten. Hoe voorkom ik dit?
 
Als je alleen de records uit orders wilt zien hoef je de testtable er niet bij te pakken natuurlijk.
 
Je bedoelt dat ik af zou kunnen met:

PHP:
$sqlprijs = mysql_query("SELECT orders.P_Id, orders.prijspp, orders.ordergr FROM orders WHERE '$id'=orders.P_Id");

Maar stel dat ik nou toch gegevens uit beide tabellen wil combineren, bijv FName en LName uit tabel 'TestTable' . Hoe zou ik hier dan voor kunnen zorgen zonder dat alles herhaald wordt voor het aantal records in TestTable?
 
Als die details in testtable staan moet je de tabel 'orders' eerst nemen en vervolgens een inner join maken met 'testtable'.
 
Wil je gegevens uit twee tabellen koppelen?
Probeer dit eens
PHP:
mysql_query("
SELECT *
FROM TestTable t, orders o
WHERE t.ID = o.P_ID
AND o.P_ID = '". $id ."'");

Daarnaast verwacht je al één resultaat dus dan is het onnodig om een WHILE te gebruiken.

Verder kun je qua optimalisatie beter "mysql_fetch_assoc()" gebruiken i.p.v. "mysql_fetch_array()".
Assoc levert enkel een array op met de naam van het veld als key terwijl array standaard zowel de naam als de nummers teruggeeft
PHP:
$sql = "SELECT naam, adres, woonplaats FROM naw_table";
$query = mysql_query($sql);

$result = mysql_fetch_array($query);
print_r($result);
/* Output:
array(
  'naam' => 'Pietje',
  'adres' => 'Helpmijstraat',
  'woonplaats' => 'Het internet',
  0 => 'Pietje',
  1 => 'Helpmijstraat',
  2 =>'Het internet'
);
*/
$result = mysql_fetch_assoc($query);
print_r($result);
/* Output:
array(
  'naam' => 'Pietje',
  'adres' => 'Helpmijstraat',
  'woonplaats' => 'Het internet'
);
*/
$result = mysql_fetch_array($query, MYSQL_ASSOC);
print_r($result);
/* Output:
array(
  'naam' => 'Pietje',
  'adres' => 'Helpmijstraat',
  'woonplaats' => 'Het internet'
);
*/
 
Bedankt voor de hulp, het is gelukt!

Sorry voor de trage reactie, ik was afgelopen week op vakantie.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan