Treeview

Salam. Məm treevievv deyilən bir forma qurmaq istiyirəm php və mysql ilə. bu əsasən drop-dovvn menyularda istifadə olunur ama mənə kateqoriya yaratmaq üçün lazımdır. sadə cədvələ id, name və parent id atributları var. ---------------------- id|name|parentId| ---------------------- 1|Rock|NULL| 2|Alternative Rock|1 3|Metal|1 4|Classic|1 5|70s|4 6|90s|4 7|Jazz|NULL 8|Folk-Jazz|7 9|Opera-Jazz|7 bu tipli bir cədvəldəki yazıları php vasitəsi ilə kateqoriya şəklində əks etdirmək istiyirəm nested listlər vasitəsi ilə. Məslən yuxaridakı cədvəl -Rock -Alternative -Metal -Classic -70s -90s -Jazz -Folk-Jazz -Opera-Jazz bunu necə etməyi məsləhət görərdiniz.bir növ forumlarda istifadə olunan düzülüşə bənziyir. SQLdə JOİNlər vasitəsi ilə etməyi bilirəm. ama mənə işin çox hissəsini php-nin görməyi lazımdır. sadə bir funksiya daxilində nested vvhile loop-u ilə, adi dəyişənlərlə. bir neçə query-dən istifadə edərək də istədiyim nəticəni ala bilirəm. ama fikrimcə daha asan yolu olmalıdır. İstənilən yönləndirmə və köməyinizin faydası olar.Əvvəlcədn təşəkkür edirəm.

Verilmiş cavablar və yazılan şərhlər (7 cavab var)

Bahruz Garamammadov (2011-07-08 13:22:29)
2ci üsul ne funksiyadan istifadə olunur nə də arraydən. birinicidən uzundu və kodun uzunluğu dərinliyə görə daha da uzanır.əlverişsiz olsa da kiməsə lazım ola bilər. məsələn mənə bu üsulla yazmaq lazım idi. aşağıdakı nümunədə 3cü dərəcəyə qədər dəriliyə gedir kod. yəni ana kateqoriya 1-dir, uşağı 2dir, 3isə 2nin usagıdır. [code][/code] Simple Database Access Bulletin Board <?php $i=0; while ($i <?php $j=0; echo ""; echo ""; echo "".$subject.' - '; echo ""; echo "".$author.""; echo ' '.$date; echo ""; while ($j <?php $k=0; echo ""; echo ""; echo "".$child_subject.' - '; echo ""; echo "".$child_author.""; echo ' '.$child_date; echo ""; while ($k <?php echo ""; echo ""; echo "".$grandchild_subject.' - '; echo ""; echo "".$grandchild_author.""; echo ' '.$grandchild_date; echo ""; echo ""; $k++;} echo ""; $j++;} echo ""; $i++; } mysql_close(); ?> [/code/

Bahruz Garamammadov (2011-07-08 13:10:17)
Kiməsə gələcəkdə lazım ola bilər, həlli yerləşdirirəm. 1ci üsul array (massiv)-dən istifadə etməklə, fikrimcə bu ən ugurlu seçimdir, sonsuz sayda və sonsuz dərinlikdə parent-child (kateqoriya-altkateqoriya) münasibəti yaratmaq olar. [code] <html> <head> <title>Simple Database Access</title> </head> <body> <?php $hostName = "dbhostadi"; $userName = "dbistifadeciadiniz"; $password = "dbparolunuz"; $databaseName = "categories"; if (!($link=mysql_connect($hostName,$userName,$password))) { printf("Error!!!"); exit(); } if (!mysql_select_db($databaseName, $link)) { printf("Error!"); exit(); } ?> <?php function ShowTree($ParentID) { //global $link; $sSQL="SELECT Id, name,parent_id FROM categories WHERE parent_id='$ParentID' "; $result=mysql_query($sSQL); $num=mysql_numrows($result); $i=0; if ($i<$num) { echo"<ul>"; while ( $row = mysql_fetch_array($result) ) { $ID1 = $row["Id"]; echo "<li>"; echo"<a href='#'>".$row["name"]."</a>"; ShowTree($ID1); } echo "</ul>"; } $i++; } ShowTree(0); ?> </body> </html> [/code]

Elvin (2011-06-28 00:31:11)
Salam, bu məsələni aşağıdakı rekursiya ilə həll etmək mümkündür: [code] function printFamilyTree($pId=0, $level=1) { if ($pId==null) { $res = mysql_query('SELECT * FROM tbl_family WHERE p_id is null'); } else { $res = mysql_query('SELECT * FROM tbl_family WHERE p_id='.$pId); } while ($row = mysql_fetch_assoc($res)) { showHyphen($level); print ' '.$row['name'].''; printFamilyTree($row['id'], $level+4); } return ; } function showHyphen($count) { for ($i=0; $i&lt;$count; $i++) { print &#039;-&#039;; } } [/code] * Qeyd edim ki, bu sadəcə bir nümunədir yaxşı olarki bu rekursiyanı DB serverde yazasınız və applicationdan həmin stored procedure -ni çağırasız.

admin (2011-05-18 16:21:36)
Bahruz, onda sizə məsləhət görərdim ki, Wordpress Core-sində yerləşən wp_list_categories-in strukturunu araşdırasınız. O eynən siz deyən işi görür(məhdudiyyətsiz sayda alt pilləsi olan tree), hər halda wordpress-i quranlar əminəm ki ən optimal yoldan istifadə ediblər. Əgər tapacağınız o yol sizin üçün yeni olmayacaqsa, deməli hazırda bildiyiniz üsullar ən optimal variantdır.

Bahruz Garamammadov (2011-05-18 07:31:29)
array(massiv)-dən istifadə edib istədiyim nəticəni ala bilirəm əslində.eləcədə SQL-də JOİN-lər vastəsi ilə istədiyimi ala bilirə,php-dən minimum istifadə edib. massivdən istifadə etmədən nəticəni almaq istiyirəm. bu da deyəsən mümkün deyil. zəhmət olmasa bu yöndə məsləhət verin. sizcə arraysiz mümkündür kateqoriya qurmaq? normal dəyişəndən istifadə edib bir nəticə almaq olar?özüm də araşdırıram tapsam yazacam.çox sağolun.

Bahruz Garamammadov (2011-05-18 06:48:21)
çox sagolun. ama məncə istədiyim nəticəni vermir sizin postdaki skript. çünki siz parent olaraq parentİd-si sıfır olanları seçirsiniz. məndə isə parent id sıfırdan fərqli də ola bilir. yəni child kateqoriya həm də parent kateqoriya ola bilir. Classic həm child kateqoriyadır həm də 70s və 90s üçün parent kateqoriyadır. sizin skript 1ci dərəcəyə qədər enə bilir. Yəni menyu var alt menyu var məndə isə alt menyunun da altmenyusu var.

Samir Azeri (2011-05-17 19:23:50)
Salam. Mən bu haqda bloqumda yazmışdım. İndi bloqa girmək mümkün olmasa da Google keşdə qalanları oxuya bilərsiniz. http://pastebin.com/pPxLRgx7

Mövzu üzrə bənzər suallara da baxa bilərsiniz.

SQL Server öyrənmənin perspektivləri

PHP error da kömək

Local server vasitəsilə PHP mail(); funksiyasında XƏTA!

şəkili digər saytdan öz saytıma necə köçürdüm?

Step IT yoxsa CodeAcademy ?

Skript üzərində işləmək