我有两个表: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行,我该如何解决?谢谢。
实际上我想用适当的图像显示所有产品。
答案 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
product_images
答案 2 :(得分:1)
LEFT JOIN返回左表中的所有行,即使右表中没有匹配项
也是如此