MySQL使用另一个查询的结果

时间:2017-09-25 00:03:26

标签: mariadb

当用户购买我的产品的许可证时,我试图将剩余的天数(如果有的话)添加到新的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,如果它意味着什么。

2 个答案:

答案 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