我的数据库中有三个表
类别: 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/