【问题标题】:How to add values of multiple table in one array?如何在一个数组中添加多个表的值?
【发布时间】:2014-02-20 06:03:24
【问题描述】:

我正在使用 opencart 数据库制作一个简单的产品应用程序,该应用程序显示产品及其类别。

这里我遇到了问题,我已经通过将值循环到一个数组来创建一个数组,现在数据库包含 3 个或更多表,其中包含共同的 category_id 1 包含带有图像链接的 id 另一个包含名称。这两个对我很重要。这是要理解的代码

$sql = "SELECT * FROM oc_category";
$result = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
    $categories[] =$row;
}

这段代码创建了一个数组,其中包含我可以进一步使用的 category_id、category_image

foreach ( $categories as $category){
    echo "the category id is $category['category_id']";
}

现在另一个表是包含类别名称的 oc_category_description。 我怎样才能使它成为一个数组,这样我就可以使用 $category['name'];回应它。

我已经尝试了很多方法,其中我查询了两个表

$sql = "SELECT * FROM oc_category, oc_category_description";
$result = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
    $categories[] =$row;
}

此方法有效,但它会减慢应用程序并显示一个结果四次

我认为每个表都有 category_id,这在每个表中都很常见,我想用它从 oc_category_description 添加名称和其他描述。

任何想法都将不胜感激。

谢谢

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

    你需要在你的查询中GROUP BY你的category_id

    $sql = "SELECT * FROM oc_category, oc_category_description 
            GROUP BY oc_category.category_id";
    

    或者你甚至可以JOIN他们喜欢

    $sql = "SELECT * FROM oc_category
            LEFT JOIN oc_category_description 
            ON oc_category.category_id = oc_category_description.category_id 
            GROUP BY oc_category.category_id";
    

    【讨论】:

    • 感谢您的回答,但它是说“组声明中的列'category_id'不明确”。为什么这么说?
    • 现在查看我的编辑...我以为它只在oc_category 中。
    • 仍然不工作它在循环中显示相同的结果,而我使用 foreach 语句它一次又一次地显示相同的名称
    • category_id 在两个表中都很常见,例如如果 oc_category 有 category_id 106,它的名称将在 oc_category_description 中包含 category_id 106 相同
    • 加入是唯一明智的做法,不需要组。
    【解决方案2】:

    您必须加入表格才能获取信息:

    $sql = "SELECT * FROM oc_category a 
            LEFT JOIN oc_category_description b ON a.category_id = b.category_id";
    

    【讨论】:

    • 谢谢你的回答,它工作正常。但我无法理解你的代码。你能详细说明一下吗。真的很感激
    【解决方案3】:

    您必须在这两个表之间添加连接条件,以免最终得到笛卡尔积:

    SELECT oc_category.*, oc_category_description.name
    FROM oc_category
    jOIN oc_category_description USING (category_id)
    

    【讨论】:

      【解决方案4】:

      您正在使用 2 个表,即使没有告诉 mysql 如何加入它们,由于这个原因,您会变得很慢。您可以使用以下 2 种方法:

      第一种方法:如果确认oc_category_description表有对应oc_category的category_id。

      $sql = "SELECT oc.column1,oc.column2,des.column1 FROM oc_category cat, oc_category_description des where cat.category_id = des.category_id";
      

      第二种方法:如果某个时间 oc_category_description 表有对应的 category_id 与 oc_category 相对应,有时没有,并且您想要主表中的所有行,如 oc_category。

      $sql = "SELECT oc.column1,oc.column2,des.column1 FROM oc_category cat left join oc_category_description des on cat.category_id = des.category_id";
      

      【讨论】:

        【解决方案5】:

        同时使用两个不同的表 USING(UNION AND JOIN)

        1.联合

        SELECT columnlist
        FROM   table1
        UNION
        SELECT columnlist
        FROM   table2
        

        2.加入

        SELECT * FROM TABLE1
                LEFT JOIN TABLE2  ON TABLE1.category_id = TABLE2.category_id"
        

        【讨论】:

          猜你喜欢
          • 2014-02-15
          • 1970-01-01
          • 1970-01-01
          • 2014-06-09
          • 2019-04-30
          • 2014-09-11
          • 1970-01-01
          • 1970-01-01
          • 2020-10-19
          相关资源
          最近更新 更多