我正在处理产品和类别之间的多对多关系的联结表 . 使用这个特定的函数,我试图接受一个product_ID变量并获取一个数组中的所有相关类别名称 . 但是,在目前的设置中,当我知道有几个产品ID时,每个产品ID只能获得一个类别 . 任何想法?还有谁知道一个很好的简单解决方案,以更直观地跟踪mysql中的M2M关系?
//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;
}
1 回答
你的功能有问题 .
在你的第二个foreach中,你将变量 $namearray 放在循环中,在每次运行时将其值重置为空数组 $namearray = array(); . 把它放在foreach之外:
而且,我只是想对你的功能提出一些建议 . 由于您拥有
junction table
,因此您无需为product
和category
单独查询,以便从这些表中获取所需的值 .只需执行INNER JOIN即可最大限度地利用表关系 .
使用您的联结表
Product_Category
因为这是创建它的真正目的 .在你的功能中,你可以尝试这个:没有经过测试,但希望这会给你一个想法 .
那就是它:)
顺便说一下,在最新版本的php中, mysql_ 函数已被弃用 . 如果你打算使用PDO或MySQLi会好多了 . 检查这个:PDO vs. MySQLi