PHP:不同的类别和多个子类别?

时间:2015-09-25 12:18:37

标签: php mysql

我试图获取不同的类别名称,并使用PHP从mysql数据库中获取与每个类别名称相关的所有子类别。

所以我需要它看起来像这样:

Cat1
sub_cat1
sub_cat2
sub_cat3

Cat2
sub_cat1
sub_cat2

Cat3
sub_cat1
sub_cat2
sub_cat3
sub_cat4

这是我的代码:

$subs = "";
$header_list = "";

$sql2 ="SELECT * FROM sub_cats GROUP BY cat_name";
$query2 = mysqli_query($db_conx, $sql2);
$productCount = mysqli_num_rows($query2); // count the output amount
if ($productCount > 0) {
    while($row = mysqli_fetch_array($query2, MYSQLI_ASSOC)){ 
             $scid = $row["id"];
             $scat_name = $row["cat_name"];
             $scsub_cat_name = $row["sub_cat_name"];

             foreach ((array) $scsub_cat_name as $item) {
                 $subs .='<li>
                        <a href="printing-products/standard-business-cards-range25d3.html?productTypeId=3#?pt=3&amp;lt=1&amp;ps=57&amp;pat=4&amp;prt=1">'.$scsub_cat_name.' <i class="fa fa-angle-double-right pull-right"></i></a>
                    </li>';

                 }

             $header_list .= '<li class="product-types">
                <span class="heading">'.$scat_name.'</span>
                <ul class="product-options">
                '.$subs.'
                </ul>
            </li>';

            /*foreach ((array) $cat_name as $item) {}*/

    }
} else {
    $header_list = "";
}

echo $header_list ;

我面临的问题是它会正确地获得不同的类别,但它不会正确地获得与每个类别相关的子类别,并且会将它们置于不同的类别下!

所有类别和子类别都存储在mysql数据库的同一个表中,如下所示:

id   cat_name   sub_cat_name
1    cat1       subcat1
2    cat1       subcat2
3    cat1       subcat3
4    cat2       subcat1
5    cat2       subcat2

etc etc.....

有人可以就此问题提出建议吗?

任何帮助都将不胜感激。

编辑:

这就是我所做的,我在mysql数据库中创建了第三个表table_cat_sub_cat

$sql2 ="SELECT catgories.cat_name, sub_cats.sub_cat_name 
FROM catgories 
INNER JOIN table_cat_sub_cat ON catgories.id=table_cat_sub_cat.cat_id 
INNER JOIN sub_cats ON table_cat_sub_cat.sub_cat_id = sub_cats.id";
$query2 = mysqli_query($db_conx, $sql2);
$productCount = mysqli_num_rows($query2); // count the output amount
if ($productCount > 0) {
    while($row = mysqli_fetch_array($query2, MYSQLI_ASSOC)){ 
             //$scid = $row["id"];
             $scat_name = $row["cat_name"];
             $scsub_cat_name = $row["sub_cat_name"];

             foreach ((array) $scsub_cat_name as $item) {
                 $subs .='<li>
                        <a href="printing-products/standard-business-cards-range25d3.html?productTypeId=3#?pt=3&amp;lt=1&amp;ps=57&amp;pat=4&amp;prt=1">'.$scsub_cat_name.' <i class="fa fa-angle-double-right pull-right"></i></a>
                    </li>';

                 }

             $header_list .= '<li class="product-types">
                <span class="heading">'.$scat_name.'</span>
                <ul class="product-options">
                '.$subs.'
                </ul>
            </li>';

但我仍然得到一些奇怪的输出,而子类别正在不相关的类别下!

3 个答案:

答案 0 :(得分:3)

您可以创建3个表:categoriessubcategoriesconnections。在categories category_idcategory_namesubcategories subcategory_id subcategory_nameconnectionsconnection_id category_id subcategory_id 1}},SELECT categories.category_name, subcategories.subcategory_name FROM subcategories INNER JOIN connections ON connections.subcategory_id = subcategories.subcategory_id INNER JOIN categories ON categories.category_id = connections.category_id $query= mysql_query($conn, $yourQuery); $results = array(); while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){ $cat_name = $row['cat_name']; $subcat_name = $row['sub_cat_name']; if(!isset($results[$cat_name])){ $results[$cat_name] = array(); } $results[$cat_name][] = $subcat_name; } if(!empty($results)){ foreach($results as $category => $subcats){ echo $category . "\n"; foreach($subcats as $subcategory){ echo $subcategory . "\n"; } } } 。然后,您可以轻松修改所有类别中的一个子类别,您可以轻松地管理它们。

查询:

{{1}}

修改

不,不,没有作者。

{{1}}

我希望它能奏效。

答案 1 :(得分:0)

您必须在2个不同的表中分隔类别和子类别,以便许多类别可以与许多子类别相关

table_cat
id   cat_name   
1    cat1       
2    cat2
3    cat3
....

table_sub_cat
id   sub_cat_name   
1    sub_cat1       
2    sub_cat2
3    sub_cat3
....

table_cat_sub_cat
id_cat    id_sub_cat
1         1
1         3
2         1
2         2
2         3
....

然后你可以

SELECT table_cat.cat_name, table_sub_cat.sub_cat_name 
FROM table_cat 
LEFT JOIN table_cat_sub_cat ON table_cat.id=table_cat_sub_cat.id_cat 
INNER JOIN table_sub_cat ON table_cat_sub_cat.id_sub_cat = table_sub_cat.id;

答案 2 :(得分:0)

如果将来有人遇到同样的问题,这是正确的做法。

  $db = new mysqli('localhost', );

    if($db->connect_errno > 0){
        die('Unable to connect to database [' . $db->connect_error . ']');
    };


    // Perform queries
    $sql1 = 'select * from catgories';
    $result1 = $db->query($sql1);

    echo "<ul>";
    foreach ($result1 as $menu)
    {
         echo "<li>".$menu["cat_name"];
         echo "<ul>";
         $menu_title = $menu["cat_name"];

        $sql2 = 'SELECT
        sub_cats.sub_cat_name
        FROM
        sub_cats
        INNER JOIN catgories ON sub_cats.cat_name = catgories.cat_name
        WHERE
        catgories.cat_name = "'.$menu_title.'"';    

        $result2 = $db->query($sql2);
        foreach ($result2 as $submenu)
        {
            echo "<li>".$submenu["sub_cat_name"]."</li>";
        }
         echo "</ul>";
         echo "</li>";
    }
    echo "</ul>";


    $db->close();