Малко помощ :)

flafy

Registered
Здравейте,
имам следната заявка, с която извеждам категориите и субкатегориите от базата данни:
Код:
<?php
include("config.php");
    $SQL = mysql_query("SELECT a.name AS parent, b.name AS child FROM `categories` AS a, `categories` AS b WHERE a.id = b.parent") or die(mysql_error());
	
for ($a=0; $a < mysql_num_rows($SQL); $a++) {
    $row = mysql_fetch_array($SQL);
    $parent = $row['parent'];
    $child = $row['child'];
    if ($parent != $prev_parent) { 
                echo "$parent"; 
        
		} 
		
		
    echo "--$child"; 
    $prev_parent=$parent; 
    
 }
?>
Чрез нея получавам това:
Код:
Категория1
--Субкатегория1
--Субкатегория2
Категория2
--Субкатегория3
--Субкатегория4
До тук добре, но трябва да получа това нещо:
Код:
<li>Категория1
 <div>
    <ul>
        <li>Субкатегория1</li>
        <li>Субкатегория2</li>
    </ul>
 </div>
</li>
...
и т.н.
Проблема е, че нещо не ми се получава, а пробвах по най-различни начини.
Някакви идеи ?
 
Код:
`id`          INT(25)          NOT NULL AUTO_INCREMENT,
`parent`      INT(25)         NOT NULL,
`name`        VARCHAR(100)  NOT NULL,

Аз го напрвих по друг начин:
Код:
$first_level = mysql_query("SELECT * FROM categories WHERE parent = '0'") or die(mysql_error());
   
while($cats = mysql_fetch_array($first_level)){
    $parent_id = $cats['id'];
    echo "<li>{$cats['name']}<div><ul>";
	$second_level = mysql_query("SELECT * FROM categories WHERE parent = '$parent_id'") or die(mysql_error());
	while($subs = mysql_fetch_array($second_level)){
	echo "<li>{$subs['name']}</li>";
	}//end second level
	echo "</ul></div></li>";
	 }//end first level

Знам, че има и начин да се направи това само с една заявка, но не ми идва на акъла как. Ако някой знае, ще се радвам да сподели :)
 
Я виж нещо такова. С помощта на рекурсия, че вземеш дори и по-долни нива, ако имаш по-късно нужда от тях. Просто си вкарай html-a тук или в друга функция, който образува HTML-a на базата на getCategoryTree(). :)

Код:
<?php
    function getCategoryTree($parent = 0) {
        $categories = array();
        $query = mysql_query("SELECT * FROM categories WHERE parent = '{$parent}'");
        while ($mainCategory = mysql_fetch_object($query)) {
            $category = array();
            $category['id'] = $mainCategory->id;
            $category['name'] = $mainCategory->name;
            $category['parent_id'] = $mainCategory->parent;
            $category['sub_categories'] = getCategoryTree($category['id']);
            $categories[$mainCategory->id] = $category;
        }
        return $categories;
    }

    $categoryTree = getCategoryTree();

    echo '<pre>';
    print_r($categoryTree);

Също така използваш mysql_*, който е deprecated от PHP 5.5.0.

php.net каза:
This extension is deprecated as of PHP 5.5.0, and will be removed in the future.

Вместо това може да използваш mysqli_* или PDO_MySQL.
 

Back
Горе