여기 내 results
MySQL의 테이블의 샘플은 = 앞으로 때문에 최대 날짜의 날짜를 모두 이동 그 사용자에 대한 가장 높은 날짜가 현재 시간 소인이됩니다.MySQL은 :</p> <p><a href="https://i.stack.imgur.com/9N7hj.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/9N7hj.png" alt="enter image description here"></a></p> <p>내가 같은 간격으로 특정 사용자에 대한 앞으로의 모든 날짜를 이동하고 싶습니다 : 지금
/* result is 823 */
SELECT DATEDIFF(
CURDATE(),
(SELECT MAX(r.`LastReviewed`)
FROM `results` r
WHERE r.`UserID` = 1)
)
하지만 앞으로 날짜를 이동할 것보다 쿼리에서 해당 정보를 사용하는 방법을 모른다 : 나는 일의 간격을 얻는 방법을 알고있다. 나는 시도했다 :
UPDATE `results` r
SET r.`LastReviewed` =
r.`LastReviewed` +
INTERVAL (
SELECT DATEDIFF(
CURDATE(),
(SELECT MAX(r.`LastReviewed`)
FROM `results` r
WHERE r.`UserID` = 1)
)
) DAY
WHERE r.`UserID` = 1
그러나이 오류 :
오류 코드 1093: 당신은 FROM 절
2 문제에서 업데이트 대상 테이블 'R'을 지정할 수 없습니다 그것이 효과가 있더라도 최대 기록이 하루가 끝날 때 (오후 11시 59 분)에 발생하면 최대 기록을 미래로 이동시킬 위험이 있습니다. 나는
당신은 하나의 쿼리를 수행 할 수 없습니다. 최대 값을 얻으려면 하위 쿼리가 필요하지만 업데이트하려는 테이블에서 읽는 것입니다. 2 단계로 수행하십시오. 최대 값을 가져온 다음 별도의 업데이트를 위해 최대 값을 사용하십시오. –
@MarcB 안녕하세요. Marc. 나는 그 논리에 문제가있다. 하위 쿼리는 슈퍼 쿼리에 종속되지 않으므로 왜 중요합니까? 하위 쿼리가 실행되고 먼저 완료되지 않았습니까? – BeetleJuice
그렇습니다. 당신은'update results ... (select from ... results)'를 가지고있다. 그래서 당신은 당신이 업데이트 대상으로 삼고있는 테이블에서 선택하고 있습니다. mysql은 단순히 이것을 허용하지 않는다. 유일하게 허용 가능한 해결 방법은 하위 쿼리 대신에'join'을 사용하는 것입니다. 하지만 집계 함수를 수행해야하므로 잘 작동하지 않습니다. –