php - 为什么 mysqli left join 返回 1 行?

标签 php mysqli

我有 2 个表:1) products 2) product_images,它的数据是这样的:

products table :
==============
ProductID   Title      model_number
-----------------------------------
1           title1     123
2           title2     124
3           title3     125
4           title4     126
5           title5     127

product_images
==============
pi_id    p_id   product_image
------------------------------
1        1      image1
2        2      image2
3        3      image3
4        4      image4
5        1      image1   

因此,如果我运行此查询,它会返回 5 行,这是正确的:

$q=mysqli_query($conn, "SELECT * FROM products");
echo $n=mysqli_num_rows($q); // return 5 rows

但是如果我运行这个查询,它会返回 6 行,为什么?它应该显示 5 行!

$searchQuery =  mysqli_query($conn, "SELECT products.ProductID,   
products.Title, products.model_number, product_images.product_image FROM 
products LEFT JOIN product_images ON products.ProductID =  
product_images.p_id ");

$isExist =  mysqli_num_rows($searchQuery); // return 6 rows

你能告诉我为什么它会再返回 1 行吗?我该如何解决?谢谢你。

实际上我想用适当的图片展示所有产品。

最佳答案

您已经使用了LEFT JOIN .并且您有两条 p_id=1 的记录;所以你有 6 行。

如果你想让p_id 唯一,那么使用GROUP_BY在您的查询中。

按如下方式编写您的查询:-

SELECT products.ProductID,   
products.Title, products.model_number, product_images.product_image FROM 
products LEFT JOIN product_images ON products.ProductID =  
product_images.p_id GROUP BY product_images.p_id;

希望对你有帮助:)

关于php - 为什么 mysqli left join 返回 1 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35267519/

相关文章:

php - 在 php 上加入具有相同列的两列

php - 如何将数组中包含的参数列表传递给bind_param?

php - MySQL将字段结果乘以另一个字段的编号

PHP MYSQLI_ASYNC 插入查询并继续

php - 选择表的最后受影响的行以立即选择插入到另一个表中

php - 将 PHP 变量传递给 Bash 脚本,然后启动它

php - 如果匿名用户无权访问 URL,如何将匿名用户重定向到自定义页面而不是登录页面?

php MySQL在嵌套div中循环

php - 在 PHP/MySQL 中手动增加计数器的最佳方法是什么?

使用 PDO 准备 () 的 PHP SQL 查看计数器