2015-09-25 86 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