2014-02-15 91 views
1

我正在處理產品和類別之間多對多關係的聯結表。有了這個特定的函數,我試圖接受一個product_ID變量並獲取數組中的所有關聯的類別名稱。然而,就目前的設置而言,當我知道有幾個產品有2個產品時,我只能得到一個產品類別。有什麼想法?也有人知道一個很好的簡單的解決方案,以更直觀地保持跟蹤在M2M中的M2M關係?php - 從mysql中返回多個值

 

    //INPUT PRODUCT ID, GET ASSOCIATED CATEGORIES 
    function productcat($pid) { 
     global $sql; 
     $query = "SELECT * FROM Product_Category WHERE Product_ID = '$pid'"; 
     $result = mysqli_query($sql, $query); 
     $catidarray = array(); 
     while($row = mysqli_fetch_array($result)) { 
       array_push($catidarray, $row['Category_ID']); 
     } 

     foreach($catidarray as $i) { 
      $query = "SELECT * FROM Categories WHERE Category_ID = '$i'"; 
      $result = mysqli_query($sql, $query); 
      $namearray = array(); 
      while($row = mysqli_fetch_array($result)) { 
       array_push($namearray, $row['Name']); 
      } 

     } 

     return $namearray; 
    } 

+0

你有**產品**和表**類別**多對多?那麼它與你的數據庫中包含的表格有多少? – Vainglory07

+0

你也可以顯示一些表結構嗎? – Vainglory07

+0

我對php和mysql都很陌生。但我的表格設置非常簡單我有: 類別:with Category_ID和其他幾個字段 產品:帶Product_ID和其他字段 Product_Category(Junction Table)帶有Product_Category_ID和Product_ID/Category_ID索引相應產品中的字段並且類別表 –

回答

0

你的功能有問題。

在你的第二個的foreach,你把變量$ namearray其在每次運行時其值重置爲空數組$ namearray =陣列()內循環;。只是把那個以外的foreach:

//--> put it here 
$namearray = array(); 
foreach($catidarray as $i) { 
    $query = "SELECT * FROM Categories WHERE Category_ID = '$i'"; 
    $result = mysqli_query($sql, $query); 

    while($row = mysqli_fetch_array($result)) { 
     array_push($namearray, $row['Name']); 
    } 
} 

而且,我只是想對你的功能提出一些建議。由於您擁有junction table,因此您無需爲productcategory單獨查詢,以便從這些表中獲得所需的值。

只要做INNER JOIN最大限度地使用您的表關係。

使用您的聯結表Product_Category,因爲這是爲什麼創建它的真正目的。

SELECT * 
FROM Product_Category AS a 
INNER JOIN Category AS b 
ON a.Category_ID = b.Category_ID 
WHERE Product_ID = $pid 

在你的函數中,你可以試試這個:未經測試,但希望這會給你想法。

//INPUT PRODUCT ID, GET ASSOCIATED CATEGORIES 
function productcat($pid) { 
    global $sql; 
    $query = "SELECT * 
       FROM Product_Category as a 
       INNER JOIN Category as b 
       ON a.Category_ID = b.Category_ID 
       WHERE Product_ID = {$pid}"; 
    $result = mysqli_query($sql, $query); 
    $namearray = array(); 
    while($row = mysqli_fetch_array($result)) { 
      array_push($catidarray, $row['Name']); 
    } 
    return $namearray; 
} 

那麼這就是它:)

順便提一句,在PHP的最新版本,mysql_功能已經過時。如果你打算使用PDOMySQLi,那就好多了。 還請覈對:PDO vs. MySQLi

+0

完美!當我懷念那樣的東西時,恨它。謝謝! –

+0

這是正常的。每個人都犯下愚蠢的錯誤。哈哈:D – Vainglory07