[php & mysql] preorder tree traversal algorithm

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44
Ik probeer een dynamische unordered list te bouwen. Dat lukt door gebruik te maken van het modified preorder tree traversal algorithm.

Ik heb echter 2 tabellen; 1 tabel categorieën, waarin ik twee kolommen (left / right) heb opgenomen voor het algoritme. De andere tabel (feeds) heeft een kolom cat_id die naar het id van de categorie verwijst. Feeds kunnen in elke catgorie voorkomen, op elke diepte.

Mijn huidige code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$aMenu = $oDatabase->fetchAll("SELECT   node.name AS name,
                                        COUNT(1) AS diepte
                               FROM     rsscategories node,
                                        rsscategories parent
                               WHERE    node.lft BETWEEN parent.lft
                               AND      parent.rgt
                               GROUP BY node.id
                               ORDER BY node.lft");

$sTree    = '';
$iCounter = 0;
foreach ($aMenu as $aTree){
  if ($iCounter == $aTree['diepte']){
    $sTree .=  '</li>' . "\n" . str_repeat('    ', $aTree['diepte']) . '<li>' . $aTree['name'];
  } else if ($iCounter < $aTree['diepte']) {
    $sTree .= "\n" . str_repeat('    ', $aTree['diepte']) . '<ul>';
    $sTree .= "\n" . str_repeat('    ', $aTree['diepte']) . '<li>' . $aTree['name'];
  } else {
    $sTree .= '</li>' . "\n" . str_repeat('    ', $aTree['diepte']) . '</ul>';
  }
  $iCounter = $aTree['diepte'];
}
$sTree .= "\n" . str_repeat('</li></ul>', $iCounter);

echo $sTree;


Met bovenstaande code, krijg ik netjes een nested unordered list. (de code verdient geen schoonheidsprijs) Ik loop vast op het toevoegen van de feeds aan deze unordered list. De data in de tabel feeds verschilt te veel van de data in de tabel categorieen om ze samen in één tabel te zetten.

Iemand een pointer of duwtje hoe ik de data uit de tabel feeds mee krijg?

[ Voor 25% gewijzigd door orf op 07-02-2006 13:22 ]


Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

De dirty hack is natuurlijk een query per node om te kijken of er iets aangekoppeld moet worden. Evt kan je de feeds in 1 query fetchen en dan per node in die array zoeken of iets in die geest?

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
niet goed gelezen, denk ik

[ Voor 100% gewijzigd door Skaah op 08-02-2006 11:59 ]