gpt4 book ai didi

php - MYSQL - 加入或子查询问题

转载 作者:行者123 更新时间:2023-11-30 22:26:08 26 4
gpt4 key购买 nike

我正在尝试获取查询以返回我的特色项目表中特色产品的所有相关记录。一切都适用于简单的 MYSQL 查询,但是我想获取存储在另一个表 (product_image) 中但有一个问题的每个产品的缩略图图像。在此“product_image”表中,并非每个产品(product_id)都会有一条记录,因为它仅在上传图像时填充,并且某些产品可能有多个记录(存储的图像)我只想为每个产品 ID 返回一条记录。因此,products 表中的一条产品记录与 product_image 表具有 0 到多的关系。

我有一个不返回图像的工作基本 SQL 语句,我可以编写一个查询,只返回在产品图像表中有记录的产品,但我需要查询返回外部查询中的所有行然后是 1 个与图像表中的产品 ID 匹配的 thumb_img,如果没有图像,它可以返回 Null 值。

这可能吗?下面是我最近的尝试,但这只是返回第一个 product_ID 的匹配缩略图,并将其复制到其他 3 个(在本例中是由于末尾的限制)记录。我需要每个记录的匹配缩略图,而不是在其余记录之间重复的第一个记录的匹配缩略图。如果该产品 ID 没有记录,则返回 null。

SELECT * FROM `products`, `featured_products`, `shop`, (SELECT thumbSrc
FROM product_image
WHERE products.productId = product_image.productID
ORDER BY product_image.position ASC
LIMIT 1) image
where shop.shopId = products.shopId AND featured_products.productId = products.productId AND visible = '1' LIMIT 4

在此先感谢您的帮助/反馈。是否可以这样做,因为我想让我的数据库尽可能规范化,而不是在产品表中也存储一个 thumb 字段。

最佳答案

未经测试,可能有更好的(性能)子选择方法......在我正在做的 PI 上。

这实际上是为了退回所有产品、相关特色产品和商店。然后只返回那些具有匹配产品的图像;但前提是图像是位置最低的产品图像。这样,如果图像丢失,产品、feature_product 和商店就不会被排除在外(因此具有 LEFT [outer] join 的性质)

SELECT *
FROM PRODUCTS P
INNER JOIN Featured_Products FP
on P.ProductID = FP.ProductID
INNER JOIN SHOP S
P.ShoPID = S.ShopID
LEFT JOIN (Select thmbsrc, productID, position, min(Position) as MinPosition
FROM Product_Image PI
group by thmbsrc, productID, Position
having MinPosition = position) PI
on PI.ProductID = P.ProductID

如果我们首先获取所有位置最低的 productID 的列表,然后将其连接回 product_image 以获取 imgsrc,则性能可能会有所提高。类似 (Select min(position) minPos, productID from product_Image) 可能允许 SQL 引擎查看每条记录一次,而不是针对 having 子句中的每个值(如果位置被索引,那么这将甚至更快)。

所以...

SELECT *
FROM PRODUCTS P
INNER JOIN Featured_Products FP
on P.ProductID = FP.ProductID
INNER JOIN SHOP S
P.ShoPID = S.ShopID
LEFT JOIN (Select imgsrc FROM Product_Image PI
INNER JOIN (Select min(position) minPos, productID
from product_Image
GROUP BY ProductID) PI2
on PI.ProductID = PI2.ProductID
and PI.position = PI2.PminPos)
on PI.ProductID = P.ProductID

可能会根据表统计信息和可用索引执行得更好。

关于php - MYSQL - 加入或子查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35138926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com