login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Oneindig diep afdalen

Offline Maarten - 02/04/2006 17:52 (laatste wijziging 02/04/2006 17:54)
Avatar van MaartenErelid Ik heb een probleem met oneindig diep geneste toestanden. Ik kom er maar niet uit, ik zoek het waarschijnlijk te ver.

Stel, je hebt de volgende MySQL-tabel (ik neem even een aantal games ter voorbeeld)
  1. id naam cat
  2. ===================================
  3. 1 Gratis 0
  4. 2 Niet gratis 0
  5. 3 Shooters 1
  6. 4 Shooters 2
  7. 5 Strategie 2
  8. 6 First-person 4
  9. 7 Third-person 4
  10. 8 Overige 4
  11. 9 RPG 2
  12. 10 RPG 1

(Natuurlijk kan je zo blijven doorgaan, er kunnen bijvoorbeeld evengoed gratis strategie-games bestaan, maar ik kan zo 20 bladzijden hier neerzetten )

Bon, dit is allemaal geen probleem, om die categorieën te doorbladeren, en een mooie breadcumb erboven, dat was allemaal geen probleem, maar nu zit ik dus met de pagina waar je zaken kan gaan toevoegen (het betreft in feite een tutorialsysteem met oneindige diepte in categorieën). Je moet dus een categorie gaan selecteren, dus ik wil daar een dropdown met het volgende neerzetten:
* Gratis
* Gratis > Shooters
* Gratis > RPG
* Niet gratis
* Niet gratis > Shooters
* Niet gratis > Shooters > First-person
* Niet gratis > Shooters > Third-person
* Niet gratis > Shooters > Overige
* Niet gratis > Strategie
* Niet gratis > RPG

Dus hoe pak je dit nu aan.. het probleem is vooral dat, als ik als het ware "afdaal" in m'n categorieën dat ik niet echt eruit kom hoe ik dan weer eentje naar boven klim.. bv. Als je in de "Gratis > Shooters" zit, hoe kom je daar weer uit en zorg je ervoor dat je geen dubbele resultaten krijgt.. kortom, welke onchristelijke mens (het is zondag) kan mij hierin enige duidelijkheid verschaffen 

edit: damn, met die tabs kan je toch ook niks aanvangen he 

7 antwoorden

Gesponsorde links
Offline Lemon - 02/04/2006 18:05
Avatar van Lemon PHP expert Heel simpel, door niet alles in 1 tabel te proppen 


Maak een tabel met Cat's en een tabel met koppelingen.

Stel u de volgende tabel voor:
id naam
======
1 Gratis
2 Niet gratis
3 Shooters
4 Strategie

en neem vervolgens zon koppeltabel
id child parent
===========
0 3 1
1 3 2
2 4 1
enz enz

D.m.v. het kopper id kan je dan kijken wat de child en parent is in zon ketting. Als je dan bv in Gratis > Shooters zit. En je weet het koppel id van die twee. Dan kan je mooi een stap terug gaan.
Offline BramBo - 03/04/2006 10:09 (laatste wijziging 03/04/2006 10:15)
Avatar van BramBo JS gevorderde Of zoals ik het persoonlijk altijd doe :
  1. | ID | NAME | LEFT | RIGHT |
  2. |--------------------------|
  3. 1 --- Top --- 0 ---- 9
  4. 2 --- Lala --- 1 --- 2
  5. 3 --- oho --- 3 --- 8
  6. 4 --- sub --- 4 --- 7
  7. 5 --- subsub 5 --- 6
  8.  
  9. Structuur :
  10. Top
  11. |-- Lala
  12. |-- Oho
  13. |--|-- sub
  14. |--|--|-- subsub


Je kunt hiermee heel makkelijk vinden waar je bent.
Voor alle technische details en toepassings gebieden :
http://www.mip....saurus.pdf
Offline Thomas - 03/04/2006 11:43
Avatar van Thomas Moderator Jep, boomstructuur bouwen met parent-child-paren.
Offline xSc - 03/04/2006 12:39
Avatar van xSc Onbekend Ik begrijp je probleem. Ik vond dat zelf ook vrij lastig. Ik geef er zelf meestal wel een maximum aan.

Hier heb je denk ik wel wat aan: http://dev.mysq...-data.html
Offline nemesiskoen - 03/04/2006 15:16
Avatar van nemesiskoen Gouden medaille

PHP expert
Door recursie juist aan te pakken.
Ik heb hetzelfde gedaan bij een tutorialsysteem waar ik mee bezig was met oneindig diepe categoriën. Ik heb een functie geschreven die dit probleem oplossen.

  1. function print_option($wat, $level=0, &$tpl) {
  2. if(($level == 0 && is_array($wat)) || $level != 0) {
  3. if(is_array($wat)) {
  4. $level++;
  5. foreach($wat as $v) {
  6. print_option($v,$level,$tpl);
  7. }
  8. } else {
  9. $option = '<option value="'. $wat .'"';
  10. if((int)$_GET['id'] == $wat) {
  11. $option .= ' selected = "selected"';
  12. }
  13. $option .= '>'. str_repeat('-', ($level == 0) ? 0 : $level-1) . " ". get_category_titel($wat) .'</option>';
  14. $tpl->newblock('categorien');
  15. $tpl->assign('option', $option);
  16. }
  17. }
  18. }
  19.  
  20. /* en deze hoort er bij om de categorie op te halen, dat zie je natuurlijk zelf maar */
  21. function get_category_titel($id) {
  22. if(is_numeric($id)) {
  23. $titel = mysql_query("SELECT titel FROM categorien WHERE id = ". $id);
  24. if(mysql_num_rows($titel) > 0) {
  25. return mysql_result($titel, 0);
  26. } else {
  27. return 'geen titel';
  28. }
  29. }
  30. return 'geen titel';
  31. }


Zoals je ziet werk ik met een template-engine maar het idee blijft hetzelfde. Hopelijk heb je er wat aan.
Offline Maarten - 03/04/2006 17:22
Avatar van Maarten Erelid Uhu, ik werk ook met TP 

Ik snap alleen niet goed wat die $wat inhoudt?
Offline ece - 03/04/2006 17:54
Avatar van ece HTML interesse Ik neem aan het spel.
$wat = het spel. Dat vraagt ie op. Zodra je iets invoegt bv een spel dan geeft ie dat weer. Dmv $wat vraagt ie op wat er is ingevoegt.

(of zeg ik nu iets raars )
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.225s