php - 从 mysql 返回多个值

标签 php mysql junction-table

我正在处理产品和类别之间多对多关系的联结表。通过这个特定的函数,我尝试接受一个product_ID变量并获取数组中所有关联的类别名称。然而,在当前的设置下,当我知道有几个产品 ID 有 2 个类别时,我只能获得一个类别。有什么想法吗?还有人知道一个好的简单解决方案可以更直观地跟踪 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;
    }

最佳答案

你的函数有问题。

在第二个 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']);
    }
}

而且,我只是想对你的功能提出一些建议。由于您拥有联结表,因此您实际上不需要对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_ 函数已经被弃用。如果您要使用 PDO 会更好或MySQLi 。 另请检查:PDO vs. MySQLi

关于php - 从 mysql 返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793811/

相关文章:

php - 如何从youtube视频获取视频标签?

php - 如何使用phpmailer从SQL表发送信息?

mysql - 如何在数据库中存储具有动态数量属性的数据

mysql - 如何在 CakePHP 中从 MySQL 获取所有表名

php - 使用 PHP 操作联结表

php - 当我将 .html 文件更改为 .php 时,CSS 文件未正确链接

php - 在 php mysql 中一次使用五个插入查询是否正确?

mysql - 一张表的多个多对多关系

mysql - 外键引用连接表中的所有记录或无记录

php - FFmpeg - 将最大视频尺寸调整为 320