login  Naam:   Wachtwoord: 
Registreer je!
 Forum

while loop in while loop

Offline Diewy - 26/07/2006 17:39
Avatar van DiewyPHP interesse men doel

een tabel uitmaken dat er als volgt uitziet

  1. <table>
  2. <tr>
  3. <td>Naam1</td>
  4. <td>email1</td>
  5. <td>service1, service2</td>
  6. </tr>
  7. <tr>
  8. <td>Naam2</td>
  9. <td>email2</td>
  10. <td>service2</td>
  11. </tr>
  12. <tr>
  13. <td>Naam3</td>
  14. <td>email3</td>
  15. <td>service2, service3</td>
  16. </tr>
  17. </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
Offline Dark_Paul - 26/07/2006 17:52
Avatar van Dark_Paul 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.
  1. WHERE klantid='".$persoon->id."'
===>
  1. WHERE klantid=".$persoon->id."
Offline nielsvdwal - 26/07/2006 17:57
Avatar van nielsvdwal 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..
Offline foe - 26/07/2006 18:02
Avatar van foe 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

Offline Ultimatum - 26/07/2006 18:21
Avatar van Ultimatum 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

  1. <?php
  2. $qPersoon = mysql_query("SELECT * FROM personen ORDER BY name ASC");
  3. while($persoon = mysql_fetch_object($qPersoon))
  4. {
  5. $qServices = mysql_query("SELECT * FROM services WHERE klantid = ".$persoon->id."");
  6. while($services = mysql_fetch_object($qServices))
  7. {
  8. $i++;
  9.  
  10. if(mysql_num_rows($select) != $i)
  11. {
  12. $komma = ', ';
  13. }
  14. ?>
  15. <tr>
  16. <td><?= $persoon->id ?></td>
  17. <td><?= $persoon->naam ?></td>
  18. <td><?= $persoon->email ?></td>
  19. <td><?= $services->service ."$komma" ?></td>
  20. </tr>
  21. <?php
  22. }
  23. }
  24. ?>


hoop dat hij het doet aangezien ik geen zin had om de tabellen te gaan aanmaken, maar try it zou ik zeggen
Offline Simon - 26/07/2006 18:48
Avatar van Simon PHP expert @ultimatum, volgens mij zal een persoon die 2 services heeft, dan 2 keer voorkomen...
  1. <?php
  2. $service = '';
  3. $qPersoon = mysql_query("SELECT * FROM personen ORDER BY name ASC");
  4. while($persoon = mysql_fetch_object($qPersoon))
  5. {
  6. $qServices = mysql_query("SELECT * FROM services WHERE klantid = ".$persoon->id."");
  7. while($services = mysql_fetch_object($qServices))
  8. {
  9. $service .= $services->service. ', ';
  10. }
  11. ?>
  12. <tr>
  13. <td><?= $persoon->id ?></td>
  14. <td><?= $persoon->naam ?></td>
  15. <td><?= $persoon->email ?></td>
  16. <td><?= substr($service,0,strlen($service)-2); ?></td>
  17. </tr>
  18. <?php
  19. }
  20. ?>

verder raad ik je aan om fetch_assoc te gebruiken 
Offline Diewy - 26/07/2006 19:05 (laatste wijziging 26/07/2006 19:21)
Avatar van Diewy PHP interesse Simon, dat werkt! 
bedankt iedereen 

wat is het voordeel van fetch_assoc tov fetch_object?

edit
en wat als een persoon meerdere zelfde services heeft, en ik wil dat maar 1keer laten zien

dus:
in tabel services staat:
1 2 EenBepaaldeService
2 2 EenBepaaldeService
3 2 EenAndereService

en ik wil zien: EenBepaaldeService, EenAndereService
Offline Simon - 26/07/2006 19:45
Avatar van Simon 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
Offline Maffiow - 26/07/2006 20:04
Avatar van Maffiow PHP interesse in kleine scripts merk je dit toch niet..
alleen als je met zeer grote DB's moet gaan werken.. dan zal het mss een fractie van een seconde zijn.. dus..

kgebruik altijd fetch_object...

een gewoonte..
krijg je der bij mij moeilijk uit :D 
Offline Diewy - 26/07/2006 20:07
Avatar van Diewy PHP interesse ok 

bedankt!
Offline Dark_Paul - 26/07/2006 20:09
Avatar van Dark_Paul PHP ver gevorderde je kan ook voor mysql_fetch_array gaan, die gebruik ik zelf altijd maar die is nagenoeg hetzelfde als mysql_fetch_assoc 
Offline Diewy - 27/07/2006 00:58
Avatar van Diewy 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:
  1. <?php
  2.  
  3. $qPersoon = mysql_query("SELECT * FROM personen ORDER BY naam ASC");
  4. while($persoon = mysql_fetch_object($qPersoon))
  5. {
  6. $service = '';
  7. $qServices = mysql_query("SELECT DISTINCT service FROM services WHERE klantid = ".$persoon->id."");
  8. while($services = mysql_fetch_object($qServices))
  9. {
  10. $service .= $services->service. ', ';
  11. }
  12. ?>
  13. <tr>
  14. <td><?= $persoon->id ?></td>
  15. <td><?= $persoon->naam ?></td>
  16. <td><?= $persoon->email ?></td>
  17. <td><?= substr($service,0,strlen($service)-2); ?></td>
  18. </tr>
  19. <?php
  20. }
  21. ?>


Bedankt iedereen!
en zeker Simon 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.23s