Php 为什么mysqli离开join返回1行?

Php 为什么mysqli离开join返回1行?,php,mysqli,Php,Mysqli,我有两个表,叫做:1)products 2)product_images,其数据如下: products table : ============== ProductID Title model_number ----------------------------------- 1 title1 123 2 title2 124 3 title3 125 4 title4

我有两个表,叫做: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行,我怎么解决它?多谢各位


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

您已经使用过。您有两条记录,p_id=1;所以你有6行

如果要使
p_id
唯一,请在查询中使用

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

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;

希望它能对您有所帮助:)

因为您在
产品图像中有两个相同的
p\u id=1

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


因为您使用了
左联接
并且在
产品图像
表中,如果外键不在第二个表中,则在左联接中有两个相同产品的图像(p\u id=1)。请阅读这里关于左连接的内容:-我想用适当的图片展示所有产品。所以,若它再返回一行,那个么用户将无法获得实际的数据数量。所以我需要显示正确数量的数据。如何做到这一点?根据您的数据库结构,您可以首先下载产品,然后使用图像表中的
select
IN(product\u id)
,或类似的内容,为该产品选择图像,但在这种情况下,您将无法获得相同p\u id具有相同图像名称的产品的所有图像。所以没有问题,但如果一个产品有多个图像,那么就不需要GROUPBY子句。如果每个产品只需要一个图像,那么这个查询可以正常工作:)@sergio这个查询只用于显示所有产品。是的,一个产品有几个图像,我会显示该图像到其他页面的产品id。