php - 从mysql返回多个值

Posted

技术标签:

【中文标题】php - 从mysql返回多个值【英文标题】:php - return multiple values to from 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。 【参考方案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_ 函数已被弃用。如果您要使用PDO 或MySQLi,那就更好了。 也检查一下:PDO vs. MySQLi

【讨论】:

以上是关于php - 从mysql返回多个值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从多个值中选择,只返回完全匹配

如何php调用oracle存储过程返回的是一个结果集,该怎么从php页面中吧数据循环输出呀

codeigniter php 和 jquery - 如何从多个表中获取数据并通过 ajax 返回

MySQL存储过程返回多个值

如何在PHP中获取MYSQL数据库返回的数据的行数?

PHP:mysql返回值“转义”文本区域