while loop in while loop
Diewy - 26/07/2006 17:39
PHP interesse
men doel
een tabel uitmaken dat er als volgt uitziet
<table>
<tr>
<td>Naam1</td>
<td>email1</td>
<td>service1, service2</td>
</tr>
<tr>
<td>Naam2</td>
<td>email2</td>
<td>service2</td>
</tr>
<tr>
<td>Naam3</td>
<td>email3</td>
<td>service2, service3</td>
</tr>
</table>
< table>
< tr>
< td> Naam1</ td>
< td> email1</ td>
< td> service1, service2</ td>
</ tr>
< tr>
< td> Naam2</ td>
< td> email2</ td>
< td> service2</ td>
</ tr>
< tr>
< td> Naam3</ td>
< td> email3</ td>
< td> service2, service3</ td>
</ tr>
</ table>
waardoor je een overzicht krijgt van de personen, en welke service ze gebruiken.
situatie
2 MySQL tabellen:
- Personen
id (uniek)
naam
email
- Services
id (uniek)
klantid
service
mijn code
http://plaatscode.be/1529 /
problemen
Hij geeft telkens de gegevens van de 1ste persoon, de 2de rij heeft ook de gegevens van 1ste persoon. In de 2de rij moeten natuurlijk de gegevens van de 2de persoon.
En misschien ook wel handig, hoe scheid ik de verschillende services met een komma?
dus: service1, service2
ik hoop dat het een beetje duidelijk is, anders vraag je het maar!
alvast bedankt voor de moeite
11 antwoorden
Gesponsorde links
Dark_Paul - 26/07/2006 17:52
PHP ver gevorderde
wat bedoel je hiermee?
Citaat:
En misschien ook wel handig, hoe scheid ik de verschillende services met een komma?
dus: service1, service2
wat wil je bereiken, want ik snap 't niet
ps. als klant-id een nummer is, hoef je geen '..' eromheen te zetten.
WHERE klantid='".$persoon->id."'
WHERE klantid= '".$persoon->id."'
===>
WHERE klantid=".$persoon->id."
WHERE klantid= ".$persoon->id ."
nielsvdwal - 26/07/2006 17:57
PHP gevorderde
je hoeft die 2de while niet te doen, want je hebt de id toch al, dus dan kan je zonder while loop de gegevens uit de database halen..
foe - 26/07/2006 18:02
HTML interesse
inderdaad:
nu als het resultaat van de query
SELECT service FROM `services` WHERE klantid='".$persoon->id."' GROUP BY service
meer dan 1 resultaat oplevert dan zal hij inderdaad meerdere rijen met dezelfde gegevens laten zien
Ultimatum - 26/07/2006 18:21
PHP expert
@hierboven zo ver ik hem begrijp heb je uiteraard wel 2 while's nodig aangezien je een while voor personen en 1 voor services nodig hebt
<?php
$qPersoon = mysql_query("SELECT * FROM personen ORDER BY name ASC");
while($persoon = mysql_fetch_object($qPersoon))
{
$qServices = mysql_query("SELECT * FROM services WHERE klantid = ".$persoon->id."");
while($services = mysql_fetch_object($qServices))
{
$i++;
if(mysql_num_rows($select) != $i)
{
$komma = ', ';
}
?>
<tr>
<td><?= $persoon->id ?></td>
<td><?= $persoon->naam ?></td>
<td><?= $persoon->email ?></td>
<td><?= $services->service ."$komma" ?></td>
</tr>
<?php
}
}
?>
<?php
$qPersoon = mysql_query ( "SELECT * FROM personen ORDER BY name ASC" ) ; {
$qServices = mysql_query ( "SELECT * FROM services WHERE klantid = " . $persoon -> id . "" ) ; {
$i ++;
{
$komma = ', ' ;
}
?>
<tr>
<td><?= $persoon -> id ?> </td>
<td><?= $persoon -> naam ?> </td>
<td><?= $persoon -> email ?> </td>
<td><?= $services -> service . "$komma " ?> </td>
</tr>
<?php
}
}
?>
hoop dat hij het doet aangezien ik geen zin had om de tabellen te gaan aanmaken, maar try it zou ik zeggen
Simon - 26/07/2006 18:48
PHP expert
@ultimatum, volgens mij zal een persoon die 2 services heeft, dan 2 keer voorkomen...
<?php
$service = '';
$qPersoon = mysql_query("SELECT * FROM personen ORDER BY name ASC");
while($persoon = mysql_fetch_object($qPersoon))
{
$qServices = mysql_query("SELECT * FROM services WHERE klantid = ".$persoon->id."");
while($services = mysql_fetch_object($qServices))
{
$service .= $services->service. ', ';
}
?>
<tr>
<td><?= $persoon->id ?></td>
<td><?= $persoon->naam ?></td>
<td><?= $persoon->email ?></td>
<td><?= substr($service,0,strlen($service)-2); ?></td>
</tr>
<?php
}
?>
<?php
$service = '' ;
$qPersoon = mysql_query ( "SELECT * FROM personen ORDER BY name ASC" ) ; {
$qServices = mysql_query ( "SELECT * FROM services WHERE klantid = " . $persoon -> id . "" ) ; {
$service .= $services -> service . ', ' ;
}
?>
<tr>
<td><?= $persoon -> id ?> </td>
<td><?= $persoon -> naam ?> </td>
<td><?= $persoon -> email ?> </td>
</tr>
<?php
}
?>
verder raad ik je aan om fetch_assoc te gebruiken
Simon - 26/07/2006 19:45
PHP expert
SELECT * FROM services
-->
SELECT DISTINCT service FROM services
probeer dat eens
Citaat:
wat is het voordeel van fetch_assoc tov fetch_object?
assoc is doorgaans sneller dan object omdat het gebruikt maakt van arrays ipv objects
Diewy - 27/07/2006 00:58
PHP interesse
toch nog even zeggen, voor het geval iemand anders hetzelfde probleem heeft.
simon bij je script, zet $service = ''; achter de while
en het is kolom "naam" ipv name
dus:
<?php
$qPersoon = mysql_query("SELECT * FROM personen ORDER BY naam ASC");
while($persoon = mysql_fetch_object($qPersoon))
{
$service = '';
$qServices = mysql_query("SELECT DISTINCT service FROM services WHERE klantid = ".$persoon->id."");
while($services = mysql_fetch_object($qServices))
{
$service .= $services->service. ', ';
}
?>
<tr>
<td><?= $persoon->id ?></td>
<td><?= $persoon->naam ?></td>
<td><?= $persoon->email ?></td>
<td><?= substr($service,0,strlen($service)-2); ?></td>
</tr>
<?php
}
?>
<?php
$qPersoon = mysql_query ( "SELECT * FROM personen ORDER BY naam ASC" ) ; {
$service = '' ;
$qServices = mysql_query ( "SELECT DISTINCT service FROM services WHERE klantid = " . $persoon -> id . "" ) ; {
$service .= $services -> service . ', ' ;
}
?>
<tr>
<td><?= $persoon -> id ?> </td>
<td><?= $persoon -> naam ?> </td>
<td><?= $persoon -> email ?> </td>
</tr>
<?php
}
?>
Bedankt iedereen!
en zeker Simon
Gesponsorde links
Dit onderwerp is gesloten .