【问题标题】:php - return multiple values to from mysqlphp - 从mysql返回多个值
【发布时间】:2014-03-14 16:00:44
【问题描述】:

我正在处理产品和类别之间多对多关系的连接表。通过这个特定的函数,我试图接受一个 product_ID 变量并在一个数组中获取所有相关的类别名称。但是,在当前设置下,当我知道有几个有 2 个时,每个产品 ID 只能得到一个类别。有什么想法吗?还有人知道一个很好的简单解决方案,可以更直观地跟踪 mysql 中的 M2M 关系吗?

//输入产品ID,获取相关类别 功能产品猫($pid){ 全局 $sql; $query = "SELECT * FROM Product_Category WHERE Product_ID = '$pid'"; $result = mysqli_query($sql, $query); $catidarray = 数组(); 而($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 = 数组(); 而($row = mysqli_fetch_array($result)) { array_push($namearray, $row['Name']); } } 返回 $namearray; }

【问题讨论】:

  • 您的表 product 和表 category 是多对多的吗?那么相对于这些表,它在您的数据库中包含多少个表?
  • 你能不能也显示一些表结构?
  • 我对 php 和 mysql 都很陌生。但是我的表设置非常简单,我有:类别:带有 Category_ID 和其他几个字段产品:带有 Product_ID 和其他几个字段 Product_Category(连接表),带有 Product_Category_ID,并且 Product_ID/Category_ID 在各自的 Product 和 Category 表中索引这些字段跨度>
  • 您的Product_Category_ID 是自动递增的吗?
  • 没错,所有桌子的主要ID标签都是AI。

标签: php mysql junction-table


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多