MySQL SELECT in while loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Henk Achterban

Henk Achterban

20/05/2011 16:50:23
Quote Anchor link
Hallo allemaal,

Ik ben bezig met een factuurscript voor de website van m'n vader.
Het komt erop neer dat ik twee tabellen heb, namelijk: cart en product.

In cart heb ik de velden: id, order_number en productid.
In product staan alle eigenschappen van de producten die via het web verkocht worden.
Productid in tabel cart staat gelijk aan id in tabel product.

Nu wil ik dus geautomatiseerd een factuur laten uitdraaien met daarin de gegevens die besteld zijn.

Alles wordt netjes geautomatiseerd ingevuld (de klantgegevens en het aantal bestelde producten), alleen wordt de link naar
de product tabel niet gelegd.

Ik heb een variabele $id aangegeven, die in mijn while loop de gegevens uit de tabel product moet halen, maar de velden blijven leeg.

Alleen als ik fysiek de id van het eerste product in de product tabel aangeef wordt deze ook daadwerkelijk ingevuld in de tabel op de factuur. Wanneer ik een andere id fysiek ingeef blijft de tabel weer leeg.

Het is een beetje een complex geheel om uit te leggen, dus ik hoop dat jullie mijn probleem enigszins snappen.

Dit is mijn code vanaf de while loop waar het mis gaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$cartquery = mysql_query("SELECT order_number, productid, COUNT(productid) FROM cart WHERE order_number='".$order_number."' GROUP BY productid");



while ($row = mysql_fetch_array($cartquery, MYSQL_ASSOC))
  {
  $id = $row['productid'];
  $qty = $row["COUNT(productid)"];
  
  $productquery = mysql_query("SELECT * FROM product WHERE id='$id'");
  
  $product = mysql_fetch_row($productquery);
  
  $productid = $product['productid'];
  $price  = $product['price'];
  
  $subtotal = $price * $qty;
  
echo '<tr>
  <td width=271 valign=top style="width:270.9pt;border:none;mso-border-top-alt:
  solid windowtext .5pt;padding:2.9pt .1in 2.9pt .1in">
  <p class=MsoNormal><span style="font-size:8.0pt;font-family:Helvetica">'.$productid.'<o:p></o:p></span></p>
  </td>
  <td width=50 valign=top style="width:49.5pt;border:none;mso-border-top-alt:
  solid windowtext .5pt;padding:2.9pt .1in 2.9pt .1in">
  <p class=MsoNormal><span style="font-size:8.0pt;font-family:Helvetica">&euro; '.number_format($price, 2).'<o:p></o:p></span></p>
  </td>
  <td width=54 valign=top style="width:.75in;border:none;mso-border-top-alt:
  solid windowtext .5pt;padding:2.9pt .1in 2.9pt .1in">
  <p class=MsoNormal><span style="font-size:8.0pt;font-family:Helvetica">'.$qty.'<o:p></o:p></span></p>
  </td>
  <td width=51 valign=top style="width:51.4pt;border:none;mso-border-top-alt:
  solid windowtext .5pt;padding:2.9pt .1in 2.9pt .1in">
  <p class=MsoNormal><span style="font-size:8.0pt;font-family:Helvetica">&euro; '.number_format($subtotal, 2).'<o:p></o:p></span></p>
  </td>
 </tr>';
 
    $total += $price * $qty;
}


Ik hoop dat jullie me kunnen helpen. Mijn php skills zijn niet bepaald hoog, dus ik hoop dat jullie een antwoord voor me hebben.
Bedankt alvast!
Gewijzigd op 20/05/2011 21:54:10 door Henk Achterban
 
PHP hulp

PHP hulp

16/01/2025 06:49:02
 
Erik van de Locht

Erik van de Locht

20/05/2011 17:01:00
Quote Anchor link
Je hebt 2 tabellen, geen databases ;-)

Je kan de info van een product ophalen met een join. Als je nu 50 artikelen in je cart hebt, worden er 50 query's uitgevoerd en dat kan veel efficienter. Dat is waar de join tevoorschijn komt.

Je hebt in je cart een productID, welke verwijst naar het product.
Je kunt dan alles in 1 keer ophalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT p.* FROM cart AS c INNER JOIN product AS p ON c.productID=p.ID
 
Henk Achterban

Henk Achterban

20/05/2011 17:43:04
Quote Anchor link
Ik bedoelde inderdaad tabellen natuurlijk :D

Ik kom er alleen nog niet echt uit. Zoals ik al zei ben ik niet bepaald een php whiz.
Vind het heel stom om te moeten vragen, maar zou je me misschien uit kunnen leggen wat de elementen van die query precies doen? Dan kan ik hem van daaruit implementeren in mijn code. Dank u!



Toevoeging op 20/05/2011 20:49:12:

Ik kom er maar niet achter waarom alleen de eerste rij uit de tabel product het doet en de rest niet.
Iemand met een idee?
Gewijzigd op 20/05/2011 20:43:11 door Henk Achterban
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.