2013-10-29 249 views
0

我有2個表:雖然內雖然從不同MySQL表

ID,cat_name

  • SUBCAT
  • ID,subcat_name,under_cat

    我想要加載子類別到正確的類別 問題是與第二循環的清單,我不能使它工作 我到底做錯了什麼?

    <? 
         $query = "SELECT * FROM `Cat`"; 
         $result = $mysqli->query($query); 
         while ($row = $result->fetch_assoc()){ 
          echo '<li><a href="#">' 
          . $row['cat_name'] . 
          '</a><ul>'; 
           $query2 = "SELECT * FROM `SubCat` WHERE under_cat = '". $row['cat_id'] ."'"; 
           $result2 = $mysqli->query($query2); 
           while ($row2 = $result->fetch_assoc()){ 
            echo '<li><a href="#">' 
            . $row2['subcat_name'] . 
            '</a></li>'; 
           } 
    
          echo '</ul></li>'; 
         } 
        ?> 
    

    編輯:從相同類別

    enter image description here 兩個列表這是代碼:

    <? 
         $query = "SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;"; 
         $result = $mysqli->query($query); 
         while ($row = $result->fetch_assoc()){ 
          echo '<li><a href="#">' 
          . $row['cat_name'] . 
          '</a><ul>'; 
           if($row['cat_id'] === $row['under_cat']){ 
           echo '<li><a href="#">'.$row['subcat_name'].'</a></li>'; 
    

    }

      echo '</ul></li>'; 
         } 
        ?> 
    
    +0

    它在做什麼錯? – TrippyD

    +0

    你有沒有想過'$ row2 = $ result2-> fetch_assoc()'? –

    +0

    其工作感謝托馬斯! – iZikoo

    回答

    0

    我討厭做SELECT *因爲他們的維修問題,但你做了什麼工作,只是做一個JOIN

    "SELECT * FROM Cat LEFT OUTER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;" 
    

    這將返回設定您想要的結果,但你需要修改你的PHP響應適當地創建列表,像這樣:

    if($row['cat_id'] === $id){ 
        echo '<li><a href="#">'.$row2['subcat_name'].'</a></li>'; 
    } else { 
        echo '</ul></li><li><a href="#">'.$row['cat_name'].'</a><ul>'; 
        iF(!empty($row['subcat_name'])){ 
         echo '<li><a href="#">'.$row['subcat_name'].'</a></li>'; 
        } 
    } 
    
    $id = $row['cat_id']; 
    

    這將添加項目到列表中,如果它是一樣的前一個條目,否則將啓動一個新的列表。 !empty是一個處理NULL的快速嘗試,因爲沒有從SubCat帶回的匹配,但在Cat中有條目。如果這絕不會是這種情況,您可以消除if聲明和您的查詢轉換成這樣:

    "SELECT * FROM Cat INNER JOIN SubCat ON SubCat.under_cat = Cat.cat_id;" 
    

    爲什麼經歷這一切的努力,你問?因爲這將提供您想要的結果集,而僅查詢一次。你之前構建的方式會查詢超過數十億次,這會殺死服務器並大大降低性能。

    希望這可以幫助你解決問題,並且你是全面的實施知識。

    +0

    謝謝我的朋友,但這是我的水平,我不能讓它工作在你的方式 – iZikoo

    +0

    我試圖讓它的工作,但問題是,它加載每個子類別的新列表,即使它從同一類別...看看編輯過的帖子:) – iZikoo