login  Naam:   Wachtwoord: 
Registreer je!
 Forum

lastige query

Offline roy - 14/06/2008 13:55
Avatar van royPHP gevorderde beste allemaal,

ik ben bezig met het maken van een CMS systeem.. daarbij kunnen pagina's in mappen geplaatst worden..

id|parent_id|title|isagroup
1|0|map1|true
2|1|submap1|true
3|1|submap2|true
4|2|subsubmap1|true
5|2|subsubmap2|true

als ik in subsubmap1 zit, dan wil ik de onderliggende mappen weten.. er kunnen bovendien een onbeperkt aantal mappen in elkaar geplaatst worden..

Hoe kan ik dat oplossen met 1 query?

groeten,
roy

13 antwoorden

Gesponsorde links
Offline Stijn - 14/06/2008 16:44
Avatar van Stijn PHP expert Gewoon de records selecteren waar de parent_id groter is dan de parent_id van "subsubmap1".
Offline roy - 14/06/2008 17:01
Avatar van roy PHP gevorderde dat zal niet werken want ik wil dan map1 en submap1 hebben.

duidelijk mag zijn dat dit slechts een voorbeeld is en dat er veel meer mappen zullen zijn...
Offline Martijn - 14/06/2008 17:20
Avatar van Martijn Crew PHP nou snappen we m ik denk dat je een paar foreach's in whiles moet maken... maar ik zou niet echt weten hoe je dat oneindig door laat gaan, zonder ingewikkelde loops enzo
Offline XenoX - 14/06/2008 17:25
Avatar van XenoX Gouden medailleGouden medaille

PHP expert
http://www.site...a-database
Offline Grayen - 14/06/2008 20:14
Avatar van Grayen PHP ver gevorderde En anders zal je veel hebben aan de volgende topic

http://www.site...e_submenus
Offline roy - 15/06/2008 13:08
Avatar van roy PHP gevorderde Dat zal niet lukken:

id|parent_id|title|isagroup
1|0|map1|true
2|1|submap1|true
3|1|submap2|true
4|2|subsubmap1|true
5|2|subsubmap2|true
6|0|map2|true
7|6|sub2map1|true
8|6|sub2map2|true
9|7|sub2submap1|true
10|7|sub2submap2|true

Als ik in subsubmap2 zit, dan wil ik de volgende resultaten verkrijgen:
submap1 en map 1

Hoe kan ik dit nu doen...??
Offline nemesiskoen - 15/06/2008 13:41
Avatar van nemesiskoen Gouden medaille

PHP expert
Door alles te selecteren en php het werk te laten doen.
Offline roy - 15/06/2008 15:15
Avatar van roy PHP gevorderde Hoe dan wel??

Volgens mij moet het ook mogelijk zijn via een query...
Offline Gerard - 15/06/2008 15:17
Avatar van Gerard Ouwe rakker niet echt mogelijk omdat je met 1 parent meerdere child rijen kan hebben.
Offline roy - 15/06/2008 15:18
Avatar van roy PHP gevorderde dus het moet wel met php logica?

Hoe zal die logica er dan uit gaan zien?
Offline timmie_loots - 15/06/2008 15:28 (laatste wijziging 15/06/2008 15:29)
Avatar van timmie_loots PHP gevorderde Als je de moeite had genomen om de link van XenoX te bekijken had je dat geweten. Ik verwijs je daarom nogmaals naar die link 
Offline Grayen - 15/06/2008 18:57
Avatar van Grayen PHP ver gevorderde Dit zou moeten werken voor wat jij wilt. ;)

Natuurlijk moet je nog wel de tabel naam in de query aanpassen.

  1. <?php
  2. if(($rResult = mysql_query('SELECT * FROM table')) !== false && mysql_num_rows($rResult) > 0)
  3. {
  4. function submenu($iCurrent, $aRows, $iLayer = 0)
  5. {
  6. foreach ($aRows as $iKey => $aRow)
  7. {
  8. if ($aRow['parent_id'] == $iCurrent)
  9. {
  10. print str_repeat('- ', $iLayer).$aRow['title'].'<br />';
  11.  
  12. unset($aRows[$iKey]);
  13.  
  14. if ($aRow['isagroup'])
  15. {
  16. submenu($aRow['id'], $aRows, $iLayer + 1);
  17. }
  18. }
  19. }
  20.  
  21. return true;
  22. }
  23.  
  24. $aRows = array();
  25.  
  26. while (($aRow = mysql_fetch_assoc($rResult)) !== false)
  27. {
  28. $aRows[] = $aRow;
  29. }
  30.  
  31. submenu(0, $aRows);
  32. }
  33. ?>
Offline roy - 15/06/2008 20:45 (laatste wijziging 15/06/2008 22:32)
Avatar van roy PHP gevorderde timmie_loots,, heb ik gedaan:

Kom op het volgende:

  1. <?PHP
  2. function get_path($id) {
  3. // look up the parent of this node
  4. echo $sQuery = "SELECT * FROM page WHERE parent_id='".$id."'";
  5. $rs = $this->conn->Execute($sQuery);
  6.  
  7. // save the path in this array
  8. $path = array();
  9.  
  10. // only continue if this $node isn't the root node
  11. // (that's the node with no parent)
  12. if ($rs->fields['parent_id']!='0') {
  13. // the last part of the path to $node, is the name
  14. // of the parent of $node
  15. $path[] = $rs->fields['title'];
  16.  
  17. // we should add the path to the parent of this node
  18. // to the path
  19. $path = array_merge($this->get_path($rs->fields['id']), $path);
  20. }
  21.  
  22. // return the path
  23. return $path;
  24. ?>


deze oplossing: http://www.site...a-database
Allleen het werkt niet:( ik snap niet wat ik fout doe
Het zou ongelovelijk mooi zijn, als bovenstaande werkend wordt....
Het gaat overigens mis als dit wordt gedaan:
$path = array_merge($this->get_path($rs->fields['id']), $path);



@Grayen: op deze manier kan je geen parent_id opgeven...
greetz
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.209s