gpt4 book ai didi

mysql - 在 MySQL 事务中使用 GROUP_CONCAT

转载 作者:行者123 更新时间:2023-11-29 17:11:46 25 4
gpt4 key购买 nike

我正在学习使用 MySQL,因此非常感谢有关此主题的帮助。

我会先尝试解释一下我的情况。我的查询涉及 4 个表,我想对表 1 Products 和 2 Product_meta 中的 JOIN1 使用 JOIN2< 进行左外连接/strong> 来自表 3 SalesCoupons 和 4 SalesCoupons_Product

Product_meta是一个包含大量有关产品的数据的表。考虑到当前情况,它有 Product_Category_idproduct_id (Products.id 的外键)

SalesCoupons 存储产品类别折扣优惠券,但只有部分产品会享受折扣,% 源自 SalesCoupons_Product 表。

SalesCoupons 商店 Product_Category(Product_meta.Product_Category_id 的外键)和折扣状态 status_id(其中状态 3 表示折扣不再可用)

SalesCoupons_Product 商店 SalesCoupons_id(SalesCoupons.id 的外键)和 Product_id(Products.id 的外键)和 Discount_prc 作为百分比折扣

现在,我需要创建一个报告,显示任何给定产品类别中未打折的产品

这是我写的

BEGIN;
SET @products_not_discounted := (SELECT GROUP_CONCAT(scp.product_id) FROM SalesCoupons_Product scp, SalesCoupons sc WHERE scp.SalesCoupons_id=sc.id AND sc.status_id<3 AND sc.product_category_id=:product_category_id GROUP BY scp.SalesCoupons_id);
SELECT p.id,p.name FROM Products p, Product_meta pm WHERE pm.product_id=p.id AND pm.product_category_id=:product_category_id AND p.id NOT IN (@products_not_discounted);
COMMIT;

我的问题是我似乎无法在 MySQL Transaction 中使用 GROUP_CONCAT

例如,如果非折扣产品的 ID 为 15,25,35,48,则查询结果将考虑忽略 15,但不会忽略其余任何

我创建了另一个使用嵌套 SQL 的解决方案,但想了解事务为何不起作用

对我有用的解决方案查询如下:

SELECT p.id,p.name,
(SELECT Discount_prc FROM SalesCoupons_Product scp,SalesCoupons sc WHERE scp.SalesCoupons_id=sc.id AND sc.status_id<3 AND scp.product_id=p.id ORDER BY scp.id DESC LIMIT 1) as Discount_prc
FROM Products p, Product_meta pm
WHERE pm.product_id=p.id AND pm.product_category_id=:product_category_id
HAVING Discount_prc IS NULL;

最佳答案

与交易无关。

此比较未按您的意图进行

NOT IN (@products_not_discounted);

@products_not_discounted 即使用逗号分隔值也只是一个字符串

相反,你会这样做

NOT IN ( SELECT cp.product_id FROM SalesCoupons_Product scp ... )

关于mysql - 在 MySQL 事务中使用 GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848166/

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