Php 为什么mysqli离开join返回1行?
我有两个表,叫做:1)products 2)product_images,其数据如下: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
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。