簡體   English   中英

PHP:不同的類別和多個子類別?

[英]PHP: Distinct categories and multiple subcategories?

我正在嘗試獲取不同的類別名稱,並使用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個表: categoriessubcategoriesconnections categories您具有category_idcategory_name ,在subcategories category_name ,您具有subcategory_idsubcategory_name ,在connections您具有connection_idcategory_idsubcategory_id 然后,您可以輕松修改所有類別中的一個子類別,您可以輕松地管理它們。

查詢:

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";
        }
    }
}

我希望它能奏效。

您必須在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;

如果任何人將來面臨同樣的問題,這是正確的方法。

  $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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM