2015-09-25 24 views
1

我試圖獲取不同的類別名稱,並使用PHP從mysql數據庫中獲取與每個類別名稱相關的所有子類別。PHP:不同的類別和多個子類別?

所以我需要它看起來像這樣:

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>'; 

,但我仍然得到一些奇怪的輸出和子類別下無關類別會!

+0

請您分享你的結構,如果有兩張表..i.e。,加入 –

回答

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(); 
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; 
+0

我也這樣做了,我試圖加入表格,但我沒有運氣。 –

+0

你試過這樣嗎? –

+0

是的,請查看我的編輯。此外,您在查詢結束時缺少一個ID。你意外地輸入了我而不是id。 –

3

您可以創建3個表:categoriessubcategoriesconnections。在categories你有category_idcategory_name,在subcategories你有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"; 
     } 
    } 
} 

我希望它能起作用。

+0

請查看我的編輯!我確實按照你的建議,但我仍然得到相同的結果!這是子類別正在不同的類別下!此外,類別正在重複多次,這是一種不需要的行爲!你是否意外地離開了GROUP BY?或者? –

+0

@ H.HISTORY我不會在週末工作,我會盡力幫助fastes我怎麼能;) – ventaquil

+0

@ H.HISTORY好吧我編輯了我的文章。 – ventaquil