Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie menu z bazy danych
Forum PHP.pl > Forum > PHP
Kas
Szukam optymalnego algorytmu generowanie menu na podstawie bazy danych. Każda pozycja menu ma swojego rodzica (0 to root). Jak zrobić to optymalnie? Ważna jest dla mnie mała złożoność obliczeniowa i pamięciowa dlatego rekurencja jest niemile widziana.

Edycja: napisałem taki kod:

  1. <?php
  2. $link = mysql_connect('localhost', 'root', 'baza1baza');
  3. mysql_select_db('niebo', $link);
  4. mysql_set_charset('utf8',$link);
  5.  
  6. function menu($parent)
  7. {
  8. $query = mysql_query('SELECT * FROM `pages` WHERE `parent` = '.(int)$parent.' ORDER BY `sort` ASC');
  9. if(mysql_num_rows($query))
  10. {
  11. echo '<ul>'."\n";
  12. while($dane = mysql_fetch_array($query, 1))
  13. {
  14. echo '<li>'."\n";
  15. echo $dane['title']."\n";
  16. lev($dane['id']);
  17. echo '</li>'."\n";
  18. }
  19. echo '</ul>'."\n";
  20. }
  21. }
  22.  
  23. menu(0);
  24.  
  25. ?>


Jednak coś nie działa. Co może być źle?
gothye
może na początku pokażesz co do tej pory zrobiłeś w tym kierunku np strukturę bazy danych ?
Kas
Oczywiście, już pokazuję. smile.gif

  1. <?php
  2. $link = mysql_connect('localhost', 'root', 'baza1baza');
  3. mysql_select_db('niebo', $link);
  4. mysql_set_charset('utf8',$link);
  5. $result=mysql_query('SELECT * FROM pages');
  6. while ($row = mysql_fetch_array($result))
  7. {
  8. echo('<li>'.$row[1].'</li>');
  9. }
  10. ?>

  1. id | title | parent | description
  2. 1 | Wiola | 0 | -
  3. 2 | Ola | 0 | -
  4. 3 | Jola | 0 | Duży biust
  5. 4 | Mariola | 0 | -
  6. 5 | Basia | 1 | -
  7. 6 | Kasia | 1 | Ładna
  8. 7 | Ania | 2 | Niska
  9. 8 | Frania | 2 | Wysoka


Oczywiście, dane przykładowe. winksmiley.jpg

Obecnie skrypt pobiera wszystkie rekordy i drukuje na ekran, ale w posortowane po id.

Edycja: Dodam jak chcę żeby to wyglądało:

Jola
Ola
Ania
Frania

Mariola
Wiola

Basia
Kasia
flashdev
Cytat(Kas @ 12.07.2010, 15:14:49 ) *
Szukam optymalnego algorytmu generowanie menu na podstawie bazy danych. Każda pozycja menu ma swojego rodzica (0 to root). Jak zrobić to optymalnie? Ważna jest dla mnie mała złożoność obliczeniowa i pamięciowa dlatego rekurencja jest niemile widziana.


Jeśli menu będzie nieczęsto odświerzane to może warto je cachować np przy pomocy var_export + fwrite, a ładować przy użyciu include.
Kas
Dokładnie tak będzie zrobione. Generator ma generować statyczną stronę XHTML, która będzie dołączana poprzez include().
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.