mysql - mysql 如何左连接两个表

标签 mysql pdo

我的数据库中有三个表

类别: ID、类别

子类别: id、类别(category.id)、sub_category

产品: ID、p_name、国家/地区、类别(category.id)、sub_category(sub_category.id)

当我执行此查询时 sub_category 为空,但是当我删除 LEFT JOIN cat ON product.category = cat.id 类别为空且 sub_category 已正确填充时

在我的 xamp 本地主机上它工作正常,但是当我将其上传到服务器上时,它出现上面的错误

SELECT * FROM product 
LEFT JOIN subcat ON product.sub_category = subcat.id 
LEFT JOIN cat ON product.category = cat.id 
WHERE product.id = $id


array(1) {
  [0]=>
  array(16) {
    ["id"]=>
    string(1) "1"
    ["p_name"]=>
    string(80) "Agusha snak"
    ["country"]=>
    string(24) "croatia"
    ["category"]=>
    string(37) "baby feed"
    ["sub_category"]=>
    string(0) ""
  }
}

最佳答案

问题是表中的列名重复。 fetch() 返回的关联数组将仅包含同名的最后一列。

使用别名来区分它们。

SELECT p.*, c.category AS category_name, s.sub_category AS subcategory_name
FROM product AS p
LEFT JOIN subcat AS s ON p.sub_category = s.id 
LEFT JOIN cat AS c ON p.category = c.id 
WHERE p.id = $id

此外,您不应将变量替换到查询中,而应使用准备好的语句和 bindParam() 来防止 SQL 注入(inject)。

关于mysql - mysql 如何左连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040278/

相关文章:

mysql - 如何将查询存储在 MySQL 列中,然后再使用该查询?

PHP 7 RC3 : How to install missing MySQL PDO

php - 强制 PHP 在继续之前等待数据库操作完成

PHP 登录系统 - 代码有什么问题?

php - 选择帖子、最后 3 条评论以及所有评论的计数

MySQL - 基于现有关系的两个关系返回一个值

mysql - 具有默认关系的左连接

mysql - 在 Mysql 中可变地设置列

Mysql Innodb 在大多数空值的列上建立索引

php - Slim 3 - getParsedBody() 不正确的整数值 : 'NULL'