2017-04-17 2 views
1

제한과 순서가있는 내부 조인을 사용하여 업데이트하려고합니다. (순서는 필수는 아니지만 표준 업데이트를 읽은 것에서부터 그들이 할 수 있도록 '플래그를'제거는 사례 관리 도구의 사용과 PHP를 사용하기위한 것입니다INNER JOIN을 ORDER BY와 LIMIT로 사용하는 MySQL 업데이트

UPDATE table1 
INNER JOIN table2 
ON table1.service_id=table2.service_id 
SET table1.flags = NULL 
WHERE table1.type = 'fttc' 
AND table1.flags = 'co' 
AND table2.sync not like '%Yes%' 
AND table1.date >= $today_date 
ORDER BY table1.priority ASC 
LIMIT 20; 

, 내가 20 표를 업데이트 할하여 예 : 작업 ...이 내가 뭘하려고 오전입니다 작업이 완료되면 수량이 변수로 전달되므로 완료하려면 20 개의 티켓을 우선 순위가 가장 높은 '우선 순위'로 먼저 업데이트하고 싶습니까?

+1

주문이 중요하지 않은 경우 한계가 맞지 않습니다. 맞습니까? –

+2

업데이트 순서는 의미가 없습니다. 성취하고자하는 바를 명확히하십시오. 한계를 사용하는 이유는 무엇입니까? –

+0

질문이 없습니다. 질문을 리펙토링하십시오. – Biswabid

답변

1

뷰 사용하는 이유가 없어야합니다 : 당신은 여러 테이블과 ORDER BYLIMIT을 사용할 수 없습니다

UPDATE table1 t1 
    SET t1.flags = NULL 
    WHERE t1.type = 'fttc' AND 
      t1.flags = 'co' AND 
      t1.date >= $today_date AND 
      EXISTS (SELECT 1 
        FROM table2 t2 
        WHERE t2.service_id = t1.service_id AND 
         t2.sync not like '%Yes%' 
       ) 
    ORDER BY t1.priority ASC 
    LIMIT 20; 

가입하세요. 그러나 table2의 조건을 WHERE 절로 옮길 수 있습니다.

+0

방금이 방법을 테스트하려는 경우 SELECT 1 FROM TABLE2에서 '1'값이 나타내는 값을 확인할 수 있습니까? 감사합니다 – djd

+0

이것은 내가 필요한 것을 정확하게합니다. 고맙습니다. – djd

+0

@djd. . . 'EXISTS'는 * rows *가 반환되는지를 검사합니다. '1'은 입력하기 쉬운 임의의 값입니다. –

3

질문을 올바르게 읽은 경우, 순서대로 우선 순위를 사용하여 조인의 결과 인 처음 20 개 레코드에 대한 업데이트. MySQL AFAIK의 UPDATE에서 직접이 작업을 수행 할 수는 없지만 업데이트 가능한보기를 생성 한 다음 업데이트 할 수는 있습니다.

CREATE VIEW yourView 
AS 
SELECT 
    t1.service_id, 
    t2.service_id, 
    t1.flags, 
    t1.type, 
    t1.date, 
    t1.priority, 
    t2.sync 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.service_id = t2.service_id 
WHERE t1.type = 'fttc'   AND 
     t1.flags = 'co'   AND 
     t2.sync NOT LIKE '%Yes%' AND 
     t1.date >= $today_date 
ORDER BY t1.priority 
LIMIT 20; 

그리고이보기를 업데이트 :

UPDATE yourView 
SET flags = NULL 
+1

나는 이런 식으로 생각하지 않았다.이게 효과가있다. 고마워. 표준 업데이트를 통해이 작업을 수행 할 수 없다는 것을 알았습니다. 이것은 제가 찾고 있던 대안이었습니다 :-) – djd

+1

이것은 SQL Server와 같은 다른 데이터베이스에서 CTE를 업데이트하는 것의 일종입니다. 나중에 참조 할 수 있도록 트릭 가방에 보관하십시오. –

관련 문제