当用户购买我的产品的许可证时,我试图将剩余的天数(如果有的话)添加到新的30天内。
SELECT
SUM(DATEDIFF(access_expires, CURDATE())) + 30 as access_remaining
FROM wp_woocommerce_downloadable_product_permissions
WHERE
user_email = 'user@mail.com' AND
product_id = 8 AND access_expires IS NOT NULL;
UPDATE wp_woocommerce_downloadable_product_permissions
SET
access_expires = DATE_ADD(CURDATE(), access_remaining)
WHERE
user_email = 'user@mail.com' AND
product_id = 8 AND
access_expires IS NULL
在我的第二个查询中,我似乎无法使用先前查询中的access_remaining。如果可能,请帮助,不使用加入。使用mariadb,如果它意味着什么。
答案 0 :(得分:1)
您似乎对此问题施加了奇怪的限制。您是否严格使用/usr/bin/mysql
,并且不能使用,例如python还是java?你能用:=
分配一个临时变量吗?为什么没有加入?
考虑将UPDATE与相关子查询一起使用,如MySQL/SQL: Update with correlated subquery from the updated table itself。
通过维护日历到期日,您选择了一种非常明智的方式来对簿记进行建模。但是考虑以不同的方式进行建模:您可以存储(开始,结束)客户付款的日期。您可能会发现它使查询更容易。
答案 1 :(得分:1)
请注意使用“用户变量”@ar
:
SELECT
@ar := SUM(DATEDIFF(access_expires, CURDATE())) + 30 as access_remaining
FROM wp_woocommerce_downloadable_product_permissions
WHERE
user_email = 'user@mail.com' AND
product_id = 8 AND access_expires IS NOT NULL;
UPDATE wp_woocommerce_downloadable_product_permissions
SET
access_expires = DATE_ADD(CURDATE(), @ar)
WHERE
user_email = 'user@mail.com' AND
product_id = 8 AND
access_expires IS NULL
我建议SUM
在这种情况下没有意义。
这样做会不简单?
UPDATE wp_woocommerce_downloadable_product_permissions
SET
access_expires = GREATEST(access_expires, CURDATE()) + INTERVAL 30 DAY
WHERE
user_email = 'user@mail.com' AND
product_id = 8 AND
access_expires IS NULL