2014-11-13 2 views
2

다음 쿼리를 예상대로 작동 시키려면 어떻게합니까? MySQL은 여러 순서로 질의를 업데이트합니까?

다음 user_id = $id AND country = $country AND d = $dSET user_code = $code

위가 false 인 경우에 사용자가있는 경우, 다음

가서 을 : MySQL은 아이디어는 다음과 같다 여러 ORDER BY

UPDATE user_list 
SET user_code = $code 
WHERE user_id = $id 
AND country = $country AND 
    ((d = $d) OR 
    (c = $c ORDER BY c ASC LIMIT 1) OR 
    (b = $b ORDER BY b ASC LIMIT 1)) 

나에게 오류를 제공합니다 첫 번째 사용자가으로 주문한 경우 user_id = $id AND country = $country AND c = $cSET user_code = $code

위의 내용이 거짓이면 th 엉 가서 user_id = $id AND country = $country AND b = $bB에 의해 주문 1 사용자를 가지고 다음 당신은 C 또는 b의 최대 값이 어떤 값과 동일한 행을 업데이트 할 것 SET user_code = $code

+1

'ORDER BY'는 'OR' 절이 아닌 쿼리의 끝 부분에 있어야합니다. * 내 코멘트를 삭제했습니다 : 거대한 오류가 있습니다. * –

+0

@ caCtus : 이것에 대해 알고 있습니다 만 어떻게 2 차 주문으로 작동시킬 수 있습니까? – SpeedCoder

+0

달성하고자하는 목표에 대해 명확하게 설명해 주시겠습니까? – Mureinik

답변

2

중첩 된 sql을 사용하여 c 또는 b로 정렬 된 첫 번째 사용자를 찾을 수 있습니다. 원래 명령을 수정했습니다.

UPDATE user_list 
SET user_code = $code 
WHERE user_id = $id 
AND country = $country AND 
    ((d = $d) OR 
    ($c = (select c from user_list order by c asc limit 1)) OR 
    ($b = (select b from user_list order by b asc limit 1))) 
+0

위대한 침몰 !!!! – SpeedCoder

3

을한다. 다음과 같이 조인을 사용하여 수행 할 수 있습니다.

+1

솔직히 말하면, 나는 그 문장이 무엇인지 이해하지 못합니다. do ... 내가하려고하는 것을 보관하는 쉬운 방법이 있습니까? – SpeedCoder

관련 문제