为什么mysqli离开加入返回1行?

时间:2016-02-08 10:35:51

标签: php mysqli

我有两个表:1)产品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行,我该如何解决?谢谢。

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

3 个答案:

答案 0 :(得分: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;

希望它会对你有所帮助:)。

答案 1 :(得分:1)

因为p_id=1

中有2个相同的product_images

答案 2 :(得分:1)

LEFT JOIN返回左表中的所有行,即使右表中没有匹配项

也是如此

Tutorials Point : Left join