Beste allen,


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


<?
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><? echo $results ["id"]; ?></td>
<td><? echo $results ["firstname"] . " " . $results ["name"] ;?> <br />
<? echo $results ["street"] . " " . $results ["number"] . " ". $results ["postbox"] ;?><br />
<? echo $results ["postalcode"] ." ". $results ["city"];?><br />
<? echo $results ["country"] ;?>
</td>
<td><? echo $results ["email"]; ?></td>
<td><? echo $results ["telephone"]; ?></td>
<td><? echo $results ["payment"]; ?></td>
<td><? echo $results ["booknumbers"]; ?></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>

</td>
<td>&nbsp;</td>
<td></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>

<tr>
<td>&nbsp;</td>
<td></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>



</table>
<br />


<? $ids = $results ["booknumbers"]; ?>



<?

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%"><?php echo "<strong>" .$results ["BOEKNUMMER"]. "</strong>" ?></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.
<?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)){
?>
De variabelen worden overschreven.
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

[size=xsmall]Toevoeging op 09/09/2014 11:35:43:[/size]

- SanThe - op 09/09/2014 11:18:44

<?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)){
?>
De variabelen worden overschreven.




[size=xsmall]Toevoeging op 09/09/2014 11:35:43:[/size]

- SanThe - op 09/09/2014 11:18:44

<?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)){
?>
De variabelen worden overschreven.




[size=xsmall]Toevoeging op 09/09/2014 11:45:12:[/size]

Topic closed!

Merci SanThe & Jr Melgert

Het ging em inderdaad om het overschrijven van de variabelen
Eentje om te onthouden!
Meerdere waardes in één kolom opslaan is niet verstandig.
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



<?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
}
?>

Om je een idee te geven hoe je dat kan uitlezen

Reageren