2017-09-25 1 views
0

사용자가 내 제품의 라이센스를 구입하면 새로운 30 일 기간의 남은 일 수를 추가하려고합니다. 내 두 번째 쿼리 내 이전 쿼리에서 access_remaining 사용할 수 없습니다처럼MySQL 다른 쿼리의 결과 사용

SELECT 
    SUM(DATEDIFF(access_expires, CURDATE())) + 30 as access_remaining 
FROM wp_woocommerce_downloadable_product_permissions 
WHERE 
    user_email = '[email protected]' 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 = '[email protected]' AND 
    product_id = 8 AND 
    access_expires IS NULL 

는 것 같습니다. 가능한 경우 조인을 사용하지 말고 도움을주십시오. mariadb를 사용하면 무엇이든 의미가 있습니다.

+0

그런 별칭을 다시 사용할 수 없습니다. 당신이 염두에 두어야 할 가장 가까운 것은 업데이트 가능한 CTE가 될 것이라고 생각합니다. 그러나 MySQL은이를 지원하지 않습니다. –

+0

이것은'SET access_expires = DATE_ADD (access_expires, INTERVAL 30 DAY)'와 똑같지 않습니까? –

답변

1

이 문제에 이상한 제한 사항이있는 것 같습니다. 엄격하게 /usr/bin/mysql을 사용하고 있으며 예를 들어 사용할 수 없습니다. 파이썬이나 자바? :=으로 임시 변수에 할당 할 수 있습니까? 왜 가입하지 않습니까?

MySQL/SQL: Update with correlated subquery from the updated table itself과 같이 상관 하위 쿼리와 함께 UPDATE를 사용해보십시오.

캘린더 만료일을 유지하여 부기를 모델링 할 때 완전히 합리적인 방법을 선택했습니다. 그러나 모델링을 다른 방식으로 고려하십시오. 고객이 지불 한 날짜를 저장 (시작, 종료) 할 수 있습니다. 문구를 쉽게 찾을 수있는 검색어가 있습니다.

1

공지 사항 @ar는 "사용자 변수"의 사용 :

SELECT 
    @ar := SUM(DATEDIFF(access_expires, CURDATE())) + 30 as access_remaining 
FROM wp_woocommerce_downloadable_product_permissions 
WHERE 
    user_email = '[email protected]' 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 = '[email protected]' 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 = '[email protected]' AND 
    product_id = 8 AND 
    access_expires IS NULL 
관련 문제