login  Naam:   Wachtwoord: 
Registreer je!
 Forum

query op 2 niveau's

Offline killerwhale6 - 14/03/2006 13:17 (laatste wijziging 14/03/2006 13:18)
Avatar van killerwhale6Nieuw lid hoi,

Dit keer wil ik een iets moelijkere query maken.

de tabel heeft 2 velden: luchthaven en land

ik wil er de luchthavens uithalen, maar gesorteerd per land.

Bedoeling is om deze in een <select> te steken, en wel dat de lijst er als volgt uit ziet:
Belgie
--Brussel
--Antwerpen
Frankrijk
--Parijs

enz...

Om alle luchthavens eruit te halen, is me al gelukt en wel als volgt:

  1. <?php
  2. $query = mysql_query("SELECT * FROM data_luchthavens ORDER BY land ASC") or die(mysql_error());
  3. ?>
  4. <select class="input" name="luchthaven">
  5. <option value="">Maak uw keuze ...
  6. <?php
  7. while($lijst = mysql_fetch_array($query)) {
  8. echo "<option>" . $lijst[luchthaven] ."\n";
  9. }
  10. ?>
  11.  
  12. </select>


Maar nu zou ik dit dus nog eens per land willen indelen (zie voorbeeld). Hoe kan ik dat doen?

thanks!

Matt

8 antwoorden

Gesponsorde links
Offline gijs - 14/03/2006 13:22
Avatar van gijs HTML beginner
  1. SELECT landnaam, plaatsnaam
  2. FROM luchthaven, land
  3. WHERE luchthaven.landnaam = land.landnaam
  4. GROUP by landnaam, plaatsnaam

Dit zou volgens mij moeten werken. Ik weet natuurlijk niet wat voor veldnamen je gebruikt. Post die anders ook even als het je hier niet uitkomt.:cool:
Offline Simon - 14/03/2006 13:25 (laatste wijziging 14/03/2006 13:28)
Avatar van Simon PHP expert
  1. <?php
  2. $query = mysql_query("SELECT * FROM data_luchthavens ORDER BY land ASC") or die(mysql_error());
  3. ?>
  4. <select class="input" name="luchthaven">
  5. <option value="">Maak uw keuze ...
  6. <?php
  7. while($lijst = mysql_fetch_assoc($query)) {
  8. ?>
  9. <option value=""><?= $lijst['land']; ?></option>
  10. <?php
  11. $query2 = mysql_query("SELECT * FROM data_luchthavens WHERE land = '".$lijst['land']."' ORDER BY luchthaven ASC") or die(mysql_error());
  12. while($lucht = mysql_fetch_assoc($query2)) {
  13. ?>
  14. <option value="">--<?= $lucht['luchthaven']; ?></option>
  15. <?php
  16. }
  17. }
  18. ?>
  19.  
  20. </select>


kben nie zeker of het zal werken, maar ja, ik kan maar proberen
Offline BramBo - 14/03/2006 13:39
Avatar van BramBo JS gevorderde
  1. $r = mysql_query("SELECT * FROM data_luchthavens ORDER BY land ASC") or die(mysql_error());
  2.  
  3. while ($row = mysql_fetch_array($r)) {
  4.  
  5. $arr[ $row['land'] ][$row['id']] = $row['luchthaven'];
  6. }
  7.  
  8. ksort($arr);
  9.  
  10. foreach($arr AS $k => $v) {
  11.  
  12. print "<option value='$k'>$k</option>";
  13.  
  14. foreach($v AS $key => $val) {
  15.  
  16. print "<option value='$key'> -- $val</option>";
  17. }
  18.  
  19. }


Zo zou 't moeten werken.. (niet getest)
Offline killerwhale6 - 14/03/2006 13:41
Avatar van killerwhale6 Nieuw lid hoi,

op basis van Simons voorstel heb ik dit gemaakt:

  1. <?php
  2. $query = mysql_query("SELECT * FROM data_luchthavens ORDER BY land ASC") or die(mysql_error());
  3. ?>
  4. <select class="input" name="luchthaven">
  5. <option value="">Maak uw keuze ...
  6. <?php
  7. while($lijst = mysql_fetch_array($query)) {
  8. echo "<option>" . $lijst['land'] . "\n";
  9. $query2 = mysql_query("SELECT * FROM data_luchthavens WHERE land = '".$lijst['land']."' ORDER BY luchthaven ASC") or die(mysql_error());
  10. while($lijst2 = mysql_fetch_assoc($query2)) {
  11. echo "<option>--" . $lijst2['luchthaven'] . "\n";
  12. }
  13. }
  14. ?>
  15.  
  16. </select>


Dit werkt, alleen komt Belgie er 2X in:
Belgie
--Brussel
--Antwerpen
Belgie
--Brussel
--Antwerpen
Frankrijk
--Parijs

Wellicht omdat ik 2 entries met belgie heb en 1 met frankrijk. Hoe kan ik Belgie maar 1X laten tonen?
Offline timo - 14/03/2006 13:50
Avatar van timo PHP ver gevorderde heb ik ook een keer gehad (dat hij bepaalde results meerdere keren geeft) bij een forum script... heb et opgelost door html en php wat meer te scheiden... (alle html die in jou gvl geen nieuwe option aanmaakt buiten de while zetten)
Offline gijs - 14/03/2006 14:08
Avatar van gijs HTML beginner Daarvoor moet je Group by gebruiken, wat ik ook in mijn post heb gedaan.

http://dev.mysq...tions.html
Offline WimJ - 14/03/2006 14:30
Avatar van WimJ Grafische gevorderde staat een hele tut over in het mysql tutorial gedeelte dacht ik ;) tuts lezen eh zegt men (rensjeh) ...
Offline killerwhale6 - 14/03/2006 15:47
Avatar van killerwhale6 Nieuw lid ok GROUP BY werkt, bedank!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.259s