Loop binnen Loop?
Ik probeer (sinds enige tijd) een loop uit een loop uit te lezen.
Eerst dien ik een aantal records uit te lezen met een klassieke if en while loop.
Maar voor elke record is het mogelijk dat er uit een andere tabel een aantal records zouden moeten bijkomen.
Het gaat over een order tabel waarbij per order het aantal boeken en hun info weergegeven moeten worden..
Dus: order record + records van de bestelde boeken...
Wie kan helpen, code hieronder
groeten,
Manu
Code (php)
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
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
<?
require "../LAB MANU/DbConnect.php";
mysql_query('SET NAMES UTF8');
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
$num_rows = mysql_num_rows($raw_results);
if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
$num_rows = mysql_num_rows($raw_results);
if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
?>
require "../LAB MANU/DbConnect.php";
mysql_query('SET NAMES UTF8');
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
$num_rows = mysql_num_rows($raw_results);
if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
$num_rows = mysql_num_rows($raw_results);
if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
?>
<table width="1024" border="0" align="center" cellpadding="5" cellspacing="5">
<tr>
<th scope="col">ID</th>
<th scope="col">adres</th>
<th scope="col">email</th>
<th scope="col">tel.</th>
<th scope="col">payment</th>
<th scope="col">booknumbers</th>
</tr>
<tr>
<td></td>
<td> <br />
Code (php)
1
<? echo $results ["street"] . " " . $results ["number"] . " ". $results ["postbox"] ;?>
<br />
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td> </td>
<td>
</td>
<td> </td>
<td></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td></td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
<br />
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
require "../LAB MANU/DbConnect.php";
mysql_query('SET NAMES UTF8');
$raw_results = mysql_query("SELECT * FROM MASTERBASE_VOLLEDIG WHERE BOEKNUMMER IN ({$ids})");
$num_rows = mysql_num_rows($raw_results);
if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
echo $results ["BESCHRIJVING"]
?>
require "../LAB MANU/DbConnect.php";
mysql_query('SET NAMES UTF8');
$raw_results = mysql_query("SELECT * FROM MASTERBASE_VOLLEDIG WHERE BOEKNUMMER IN ({$ids})");
$num_rows = mysql_num_rows($raw_results);
if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
echo $results ["BESCHRIJVING"]
?>
<table>
</td>
<td align="left" width="47%"></td>
</tr>
</table>
Kun je misschien een voorbeeld geven van je tabellen? Je kunt dit veel eenvoudiger doen met een join query denk ik persoonlijk.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM MASTERBASE_VOLLEDIG WHERE BOEKNUMMER IN ({$ids})");
while($results = mysql_fetch_array($raw_results)){
?>
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM MASTERBASE_VOLLEDIG WHERE BOEKNUMMER IN ({$ids})");
while($results = mysql_fetch_array($raw_results)){
?>
De variabelen worden overschreven.
Gewijzigd op 09/09/2014 11:35:43 door - SanThe -
Jr Melgert op 09/09/2014 11:00:58:
Kun je misschien een voorbeeld geven van je tabellen? Je kunt dit veel eenvoudiger doen met een join query denk ik persoonlijk.
ORDERS = id, firstname, name, adres, booknumbers
MASTERBASE_VOLLEDIG = boeknummer, titel, auteur
Booknumbers en boeknummer komen overeen, die 2 kan je als link gebruiken.
Alleen kunnen er in booknumbers meerdere 'boeknummer' zitten..
Ik dacht twee loops te gebruiken maar de code stopt na 1 order uitgelezen te hebben
Toevoeging op 09/09/2014 11:35:43:
- SanThe - op 09/09/2014 11:18:44:
De variabelen worden overschreven.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
?>
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
?>
De variabelen worden overschreven.
Toevoeging op 09/09/2014 11:35:43:
- SanThe - op 09/09/2014 11:18:44:
De variabelen worden overschreven.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
?>
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
$raw_results = mysql_query("SELECT * FROM ORDERS WHERE id > 0");
while($results = mysql_fetch_array($raw_results)){
?>
De variabelen worden overschreven.
Toevoeging op 09/09/2014 11:45:12:
Topic closed!
Merci SanThe & Jr Melgert
Het ging em inderdaad om het overschrijven van de variabelen
Eentje om te onthouden!
Haal de kolom booknumbers weg uit de orders tabel, en maak daar een nieuwe tabel voor:
books_by_order
order_id(PK)
book_id(PK)
amount
selling_price
Code (php)
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
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
<?php
$sql = "SELECT o.id,
o.name,
bo.amount,
bo.selling_price,
bo.amount * bo.selling_price subtotal,
m.omschrijving
FROM
orders o
JOIN
books_by_order bo
ON o.id = bo.order_id
JOIN
masterbase_volledig m
ON bo.book_id = m.boeknummer
ORDER BY o.id";
if (false !== $result = mysqli_query($con, $sql) {
$id = -1
$total = 0.00;
while ($order_row = mysql_fetch_assoc($result) {
if ($order_row['id' != $id) {
if ($id != -1) {
//hier de afsluitende dingen voor de eerdere order
}
$id = $order_row['id'];
// een nieuw blok beginnen
}
$total += (float) $order_row['subtotal');
// hier de gegevens tonen
}
// hier de afsluitende dingen voor de laatste order
}
?>
$sql = "SELECT o.id,
o.name,
bo.amount,
bo.selling_price,
bo.amount * bo.selling_price subtotal,
m.omschrijving
FROM
orders o
JOIN
books_by_order bo
ON o.id = bo.order_id
JOIN
masterbase_volledig m
ON bo.book_id = m.boeknummer
ORDER BY o.id";
if (false !== $result = mysqli_query($con, $sql) {
$id = -1
$total = 0.00;
while ($order_row = mysql_fetch_assoc($result) {
if ($order_row['id' != $id) {
if ($id != -1) {
//hier de afsluitende dingen voor de eerdere order
}
$id = $order_row['id'];
// een nieuw blok beginnen
}
$total += (float) $order_row['subtotal');
// hier de gegevens tonen
}
// hier de afsluitende dingen voor de laatste order
}
?>
Om je een idee te geven hoe je dat kan uitlezen