2016-01-27 173 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

感謝您的幫助和建議 –