首页 文章

php - 从mysql返回多个值

提问于
浏览
2

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

  • 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

相关问题