php - 从mysql返回多个值

时间:2014-02-15 05:30:47

标签: php mysql junction-table

我正在处理产品和类别之间多对多关系的联结表。使用这个特定的函数,我试图接受一个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 个答案:

答案 0 :(得分:1)

您的功能有问题。

在你的第二个foreach中,你将变量 $ namearray 放在循环中,在每次运行时将其值重置为空数组 $ namearray = array(); 。把它放在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