[ Milan M. Radovic @ 11.12.2009. 11:56 ] @
Evo, ja sam imao bio probleme da napravim ovo i kad sam napravio, ajd reko da okacim, mozda nekom zatreba.
Uz vrlo malo prerade oko smarty dela, uz neki while, moze da se uradi na beskonacno mnogo nivoa... Ako budem imao potrebe i za tim, definitivno cu uraditi ;)

Tabela ima 3 polja - id, namei parent_id (id roditelja)

Upit ka bazi
Code:
    SELECT *,
    (SELECT COUNT(*) FROM categories AS c2 WHERE c2.parent_id=c1.id) 
        AS childs
    FROM categories AS c1 ORDER BY name ASC;


Tabela koja se dobija
Code:
+----+-------------------+-----------+--------+
| id | name              | parent_id | childs |
+----+-------------------+-----------+--------+
| 23 | .Co.Yu            |        17 |      0 |
| 22 | .COM              |        17 |      0 |
| 24 | .in.RS            |        17 |      0 |
| 25 | .org.rs           |        17 |      0 |
| 21 | .RS               |        17 |      0 |
|  7 | 5.1               |         5 |      0 |
|  8 | 7.1               |         5 |      0 |
|  3 | Automobili        |         1 |      3 |
|  1 | Automoto          |      NULL |      2 |
| 19 | CPU               |        16 |      0 |
| 17 | Domeni            |        14 |      5 |
|  5 | DVD Plejeri       |         2 |      3 |
|  2 | Elektronika       |      NULL |      2 |
| 12 | Ford              |         3 |      0 |
| 20 | Graficka          |        16 |      0 |
| 18 | HDD               |        16 |      0 |
| 16 | Komponente        |        14 |      3 |
| 15 | Konfiguracije     |        14 |      0 |
|  4 | Moto-cikli        |         1 |      1 |
|  6 | MP3 Plejeri       |         2 |      0 |
| 13 | Preko 1300ccm     |         3 |      0 |
| 14 | Racunari i oprema |      NULL |      3 |
| 10 | Yamahe            |         4 |      0 |
| 11 | Yugo              |         3 |      0 |
+----+-------------------+-----------+--------+


Ovo 'childs' moze da koristi da se proveri u smarty da li je TRUE (vece od 0) tj. da li ima 'dece' pa ukoliko ima, da se ne dozvoli korisniku ... sta god.


Smarty Part :

Code:

{section name=lvl_1 loop=$categories} 
{if !$categories[lvl_1].parent_id} 
{$categories[lvl_1].name}<option disabled="disabled" class='parentcategory'>{$categories[lvl_1].name}</option><br />
    {section name=lvl_2 loop=$categories} 
    {if $categories[lvl_2].parent_id==$categories[lvl_1].id}
    --{$categories[lvl_2].name}<br />
        {section name=lvl_3 loop=$categories} 
        {if $categories[lvl_3].parent_id==$categories[lvl_2].id}
    ----{$categories[lvl_3].name}<br />
        {/if} 
        {/section}
    {/if} 
    {/section} 
{/if} 
{/section}



Output
Code:
AutomotoAutomoto
--Automobili
----Ford
----Preko 1300ccm
----Yugo
--Moto-cikli
----Yamahe
ElektronikaElektronika
--DVD Plejeri
----5.1
----7.1
--MP3 Plejeri
Racunari i opremaRacunari i oprema
--Domeni
----.Co.Yu
----.COM
----.in.RS
----.org.rs
----.RS
--Komponente
----CPU
----Graficka
----HDD
--Konfiguracije



[ Man-Wolf @ 14.12.2009. 09:44 ] @
Baci pogled na ovaj link:

http://dev.mysql.com/tech-reso...rticles/hierarchical-data.html

:-)
[ Milan M. Radovic @ 21.12.2009. 16:13 ] @
Znam... odlepio sam kad sam to video... samo sam rekao - NE :D
[ djordje @ 08.01.2010. 06:48 ] @
Zasto?
[ VladaSu @ 03.02.2010. 16:29 ] @
Dosta dugo sam radio ovako ali mi palo na pamet da proba, da imam tabelu sa grupama i tabelu sa vezama izmedju grupa.
id|name i id|parent_id - sto mi se kasnije isplatilo kod raznih searchova po grupama i unutar grupa jer su SQL-ovi bili mnogo jednostavniji i pregledniji a samim tim veliki SQL-ovi su postali brzi.