2016-01-27 247 views
2

在我网站的第一页中,用户假设看到一些类别,每个类别下都有一些子类别。我从数据库中获取这些类别和子类别。数据库中有两个名为“category”和“subcategory”的表,我试图合并这两个表。在输出中应该是这样的while循环的结果显示不同

the expected ouput

,但我得到这个输出中

the ouput i am getting

这里是我的代码

<?php 

    $host="localhost"; 
    $user="root"; 
    $pass=""; 
    $db="doc"; 

    $conn=mysqli_connect($host,$user,$pass,$db); 

    $show=mysqli_query($conn,"SELECT DISTINCT a.id, a.category_name, b.subcat_name, b.cat_name 
     FROM category a, subcategory b 
     WHERE a.category_name = b.cat_name"); 

?> 

<html lang="en"> 
<head> 
    <title>Home</title> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css"> 
    <link href="css/custom.css" rel="stylesheet"> 
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"> 
    <script src="bootstrap/bootstrap.min.js"></script> 
    <script src="js/jquery.min.js"></script> 
</head> 
<body> 
      <div class="col-lg-3 sidebar"> 
      <?php 
     while($showsub = mysqli_fetch_assoc($show)) { ?> 

       <ul> 
        <li><i class="fa fa-cube"></i><a href="category.php?id=<?php echo $showsub['id']; ?>"><?php echo $showsub['category_name']; ?></a> 
         <ul style="list-style-type:circle"> 
          <li><?php echo $showsub['subcat_name']; ?></li> 

         </ul> 
        </li> 
       </ul> 
      <?php 
      }; ?> 
      </div> 
</body> 
</html> 

我困在这里最后2天。

回答

0
<?php 
$host="localhost"; 
$user="root"; 
$pass=""; 
$db="doc"; 

$conn=mysqli_connect($host,$user,$pass,$db); 
?> 

<html lang="en"> 
<head> 
    <title>Home</title> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css"> 
    <link href="css/custom.css" rel="stylesheet"> 
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"> 
    <script src="bootstrap/bootstrap.min.js"></script> 
    <script src="js/jquery.min.js"></script> 
</head> 
<body> 
    <div class="col-lg-3 sidebar"> 

     <?php 
     $cat = mysqli_query($conn,"SELECT DISTINCT id, category_name FROM category"); 
     while($rowCat = mysqli_fetch_assoc($cat)) 
     { 
     $catName = $rowCat['category_name']; 
     ?> 
      <ul> 
       <li> 
        <i class="fa fa-cube"></i> 
        <a href="category.php?id=<?php echo $rowCat['id']; ?>"> 
         <?php echo $rowCat['category_name']; ?> 
        </a> 

       <?php 
       $subCat = mysqli_query($conn,"SELECT * FROM subcategory WHERE cat_name='$catName'"); 
       while($rowSubCat = mysqli_fetch_assoc($subCat)) 
       {?> 
       <ul style="list-style-type:circle"> 
        <li><?php echo $rowSubCat['subcat_name']; ?></li> 
       </ul> 
       <?php }?> 

       </li> 
      </ul> 
     <?php 
     }?> 

    </div> 
</body> 
</html> 
+1

非常感谢您的帮助Nana Partykar –

+0

很高兴帮助Ashiqur。 –

1

你应该格式化阵列第一据此 -

$categories= $subcats= array(); 
while($showsub = mysqli_fetch_assoc($show)) { 
    $categories[]= $showsub['category_name']; // array of categories 
    $subcats[$showsub['category_name']][]= $showsub['subcat_name']; // array of sub categories with category as indexes 
}; ?> 

然后HTML -

foreach($categories as $cat) { // Loop through the categories array 
?> 
<ul> 
     <li><i class="fa fa-cube"></i><a href="category.php?id=<?php echo $showsub['id']; ?>"><?php echo $cat; ?></a> 
      <?php foreach($subcats[$cat] as $subcat) {?> // loop through the subcategories depending on categories 
      <ul style="list-style-type:circle"> 
       <li><?php echo $subcat; ?></li> 
      </ul> 
      <?php } ?> 
     </li> 
</ul> 
<?php 
} 
+0

可以expalin代码有点 和感谢您的帮助 –

+0

查看意见 –

0

只有两个一般建议:了解一个模板系统能够分裂介绍(HTML)和逻辑(php)并查看使用MySQL准备好的语句 - 这会让你的生活更容易一点点沿着道路

你得到的是什么wou ld应该来自您所显示的代码。你问每个子类别的类别。你有两种不同的方法来解决这个问题: 正如Sougata所说 - 做两个不同的表,然后相应地加入。但是也可以从一个表中创建两级列表。然后,你需要确保的类别和子进来有意义的顺序:

$show=mysqli_query($conn,"SELECT DISTINCT a.id, a.category_name, b.subcat_name, b.cat_name 
    FROM category a, subcategory b 
    WHERE a.category_name = b.cat_name 
    order by category_name, subcat_name"); 

如果你只是“按顺序”添加到您的SQL查询,你的输出应该看起来像

  • 类别1
    • SUBCAT 1
  • 类别1
    • SUBCAT 3
  • 类别1
    • SUBCAT 5
  • 类别2
    • SUBCAT 2
  • 类别2
    • SUBCAT 4

下一步将是添加一些逻辑,以剿重复类别:

<ul> 
<?php 
$oldcat=""; 
$started=0; 
while($showsub = mysqli_fetch_assoc($show)) { 
    $cat=$showsub['category_name']; 
    $subcat=$showsub['subcat_name']; 
    if ($oldcat != $cat){ 
     if($started){print("</ul>");} 
     print("<li>$cat</li><ul>\n"); 
    } 
    print("<li>$subcat</li>") 
} 
print("</ul></ul>\n"); 
?> 

这不是一个直接替换你的代码,但我希望你明白了。读它作为一个PHP重伪代码...

,并再次请请你帮个忙,并开始使用模板系统..

+0

感谢您的帮助和建议 –