login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zoeken in 3 kolommen

Offline olafg - 14/09/2006 19:07
Avatar van olafgNieuw lid Hallo,

Ik ben bezig met een menu waarbij je drie opties hebt.

Eerst zoek je op een merk (bijv. acer).
Dan krijg je alvast alle producten van acer, maar je kan dan nog beter zoeken door ook een subcategorie op te geven bijv. notebook, dan blijven alleen alle acer notebooks over.
De laatste optie is om ook nog op een 2e sub te zoeken waarbij je alle types krijg.

Ik loop elke keer vast, twee gaat nog maar ik krijg die derde er niet bij.

Hij moet zoeken in een tabel met allemaal producten.

Ik heb nu dit:

<? SELECT * FROM products WHERE merk='" . $_GET['merk'] . "' OR (subcategorie_een='" . $_GET['sub1'] . "' AND subcategorie_twee='" . $_GET['sub2'] . "') ORDER BY product"); ?>

Ik hoop dat iemandme kan helpen.

Alvast bedankt!

Groeten,
Olaf

11 antwoorden

Gesponsorde links
Offline MechaVore - 14/09/2006 19:16 (laatste wijziging 14/09/2006 19:17)
Avatar van MechaVore Gouden medaille

PHP gevorderde
Dus als ik het gewoon goed begrijp, wil je als er op acer gedrukt is, en daarna op notebooks alle notebooks van acer hebben en daarna alle speciale types van de notebooks van acer. Dan moet je geen OR in je query hebben maar een AND..

SELECT * FROM products WHERE merk = '".$_GET['merk']."' AND subcategorie_een = '".$_GET['sub1']."' AND subcategorie_twee = '".$_GET['sub2']."'
Offline delta_004 - 14/09/2006 19:18
Avatar van delta_004 Onbekend Hij bedoelt zoeken:D
Offline MechaVore - 14/09/2006 19:20
Avatar van MechaVore Gouden medaille

PHP gevorderde
Dan nog blijft de query hetzelfde.. ?
Offline olafg - 14/09/2006 19:43
Avatar van olafg Nieuw lid Sorry ik zal nog iets duidelijker zijn.

Ik heb drie dropdown menu's.
Eerste wat ze kunnen kiezen is het merk, als ze dat hebben gekozen komen alle records van dat nerk er te staan.
Tweede dropdown weet dus ook het merk en zoekt daarbij alle subcategorien dus bijv. notebooks.
Hierna blijven dus alleen alle Acer notebooks over, maar het kan nog specifieker want het derde dropdown menu geeft alle type acer notebook weer.

Uiteindelijk zal mijn pagina dus bijv. zo opgeroepen worden:
producten.php?merk=ACER&sub1=Notebook&sub2=Aspire

Hoop dat het zo wat duidelijker is.
Offline MechaVore - 14/09/2006 19:52 (laatste wijziging 14/09/2006 19:54)
Avatar van MechaVore Gouden medaille

PHP gevorderde
  1. <?
  2. $sQuery = '';
  3. if(isset($_GET['merk']))
  4. {
  5. $sQuery .= " WHERE merk='".htmlspecialchars(addslashes($_GET['merk']), ENT_QUOTES)."' ";
  6. }
  7. if(isset($_GET['merk'], $_GET['sub1']))
  8. {
  9. $sQuery .= " AND subcategorie_een = '".htmlspecialchars(addslashes($_GET['sub1']), ENT_QUOTES)."' ";
  10. }
  11. if(isset($_GET['merk'], $_GET['sub1'], $_GET['sub2']))
  12. {
  13. $sQuery .= " AND subcategorie_twee = '".htmlspecialchars(addslashes($_GET['sub2']), ENT_QUOTES)."' "
  14. }
  15. mysql_query("SELECT * FROM products ".$sQuery." ORDER BY products")or die(mysql_error());
  16. ?>
Het is niet helemaal optimaal, maar dit is om je een voorbeeldje te geven, nogmaals bovenstaande query is dus wat je nodig hebt..
Offline olafg - 14/09/2006 20:38
Avatar van olafg Nieuw lid Geweldig dit werk!!
Bedankt, nu is toch bezig ben heb ik gelijk nog een probleem.

In mijn dropdown menu komen nu alle merken te staan, maar omdat ik meer dan 50 acer artikelen heb staan in de database laat hij nu 50 keer acer zien en daarna pas AMD.

Kan ik alle merken ook 1 keer laten zien?

Jullie hebben me al geweldig geholpen, bedankt!
Offline MechaVore - 14/09/2006 20:40 (laatste wijziging 14/09/2006 20:41)
Avatar van MechaVore Gouden medaille

PHP gevorderde
Ja, door drie while lussen door elkaar te doen..
dus ff simpel:

  1. <?
  2. while(select merk)
  3. {
  4. while(select sub1 where merk = 'merk uit de while')
  5. {
  6. while(select sub2 where merk = 'merk uit de while' and sub1 = 'sub1 uit 2de while lus..')
  7. {
  8. }
  9. }
  10. }
  11. ?>
Offline delta_004 - 14/09/2006 20:44
Avatar van delta_004 Onbekend lol dan geeft veel errors:D
Offline MechaVore - 14/09/2006 20:44
Avatar van MechaVore Gouden medaille

PHP gevorderde
tja, het ging om het idee ;)
Offline olafg - 14/09/2006 21:45
Avatar van olafg Nieuw lid haha bedankt voor de snelle reactie.
Ik ben alleen net begonnen met php zou je me misschien iets meer de goede richting in willen helpen?

Ik snap het nog niet helemaal hoe ik het moet toepassen. 

Alvast super bedankt.
Offline MechaVore - 14/09/2006 22:56
Avatar van MechaVore Gouden medaille

PHP gevorderde
ok, je selecteerd eerst in een while lus alle merken.

  1. <?
  2. $sql1 = mysql_query("SELECT * FROM merken")or die(mysql_error());
  3. if(mysql_num_rows($sql1) > 0)
  4. {
  5. while($assoc1 = mysql_fetch_assoc($sql))
  6. {
  7. echo $assoc1['merk'].'<br />';
  8. }
  9. }
  10. ?>
  11.  
  12. output:
  13. acer
  14. toshiba
  15. sony
  16. medion
Nu willen we dat bij elk merk alle sub items getoond worden.
  1. <?
  2. $sql1 = mysql_query("SELECT * FROM merken")or die(mysql_error());
  3. if(mysql_num_rows($sql1) > 0)
  4. {
  5. while($assoc1 = mysql_fetch_assoc($sql))
  6. {
  7. echo $assoc1['merk'].'<br />';
  8. $sql2 = mysql_query("SELECT * FROM productlijn WHERE merkid = '".$assoc1['merkid']."'")or die(mysql_error());
  9. if(mysql_num_rows($sql2) > 0)
  10. {
  11. while($assoc2 = mysql_fetch_assoc($sq2))
  12. {
  13. echo $assoc2['productlijn'].'<br />';
  14. }
  15. }
  16. }
  17. }
  18. ?>
  19.  
  20. Output:
  21. Acer
  22. Acer model 1
  23. Acer model 2
  24. Toshiba
  25. Toshiba sattelite pro
  26. Sony
  27. Sony Vaio
  28. Medion
  29. Medion model 1
Nu gaan we hetzelfde herhalen voor de categorieen onder de modellen.
  1. <?
  2. $sql1 = mysql_query("SELECT * FROM merken")or die(mysql_error());
  3. if(mysql_num_rows($sql1) > 0)
  4. {
  5. while($assoc1 = mysql_fetch_assoc($sql))
  6. {
  7. echo $assoc1['merk'].'<br />';
  8. $sql2 = mysql_query("SELECT * FROM productlijn WHERE merkid = '".$assoc1['merkid']."'")or die(mysql_error());
  9. if(mysql_num_rows($sql2) > 0)
  10. {
  11. while($assoc2 = mysql_fetch_assoc($sq2))
  12. {
  13. echo $assoc2['productlijn'].'<br />';
  14. $sql3 = mysql_query("SELECT * FROM products WHERE merkid = '".$assoc1['merkid']."' AND productlijnid = '".$assoc2['productlijnid']."'")or die(mysql_error());
  15. if(mysql_num_rows($sql3) > 0)
  16. {
  17. while($assoc3 = mysql_fetch_assoc($sq3))
  18. {
  19. echo $assoc3['product'].'<br />';
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
  26. ?>
  27.  
  28. Output:
  29. Acer
  30. Acer model 1
  31. Acer model 1 400
  32. Acer model 1 500
  33. Acer model 2
  34. Acer model 2 2000
  35. Toshiba
  36. Toshiba sattelite pro
  37. Toshiba sattelite pro 4000
  38. Toshiba sattelite pro 4500
  39. Sony
  40. Sony Vaio
  41. Sony Vaio FE22M
  42. Sony Vaio FE22S
  43. Medion
  44. Medion model 1
  45. Medion model 1 40

Dus eerst selecteren we alle merken, vervolgens selecteren we per merk een productlijn en uiteindelijk selecteren we bij elke productlijn en merk de producten.
Het hoeft natuurlijk niet persee zo te zijn maar dit is om even snel een voorbeeldje te geven. Je namelijk ook gewoon alles in een tabel kunnen stoppen, en met enum waardes aangeven in welk level het item zich bevindt.
Of 3 tabellen en een koppeltabel en vervolgens alles dmv joins selecteerd.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.221s