2012-08-03 2 views
2

은 가정하자 다른 테이블의 다음 행으로 나는 다음 테이블 구조, 테이블 A가 나는 테이블의 B를 변경하려면SQL 변화 값,

| id | title | last_id | 
|----|-------|---------| 
| 1 | a | 1 | 
| 2 | b | 2 | 
| 3 | c | 3 | 

last_id에서 id까지 표 A.

예 : last_id 현재

1, 그래서 그것이 표 A에서 다음 큰 ID 가치의 전달해야 (표의 B 첫번째 행 참조).

는 그래서 갈 것입니다 :

1 -> 3 -> 4 -> 7

그것은 PHP로도 할 수 있지만, 아마도 SQL 서버에 보관하는 방법이있다.

미리 감사드립니다.

참고 : 서버는 MySQL을 실행합니다.

+0

그리고 모든 행이 동일합니까? 내 말은, 프로세스 마지막에 표 B의 last_id는 모두 7이라는 값을 가질 것입니까? – Yaroslav

+0

예, 이것이 최종 결과입니다. – Novak

+0

어떤 데이터베이스 서버를 사용하고 있습니까? MySQL은? Microsoft SQL Server? 신탁? 다른 것? – Jocelyn

답변

3

이전 대답은 정확하지만 당신은 단지 값을 필요로하는 내가 믿는 일이 더 필요한 7

UPDATE table_b 
    SET last_id = (SELECT MAX(id) FROM table_a) 

편집하지 :

지금은 table_a 더 큰 것을 last_id부터 최소 값을 선택합니다 table_b

UPDATE table_b 
    SET last_id = (SELECT MIN(id) FROM table_a WHERE id>last_id) 
+0

3과 4를 거치지 않고'last_id'를'7'로 설정하지 않으시겠습니까? – Novak

+0

예, 그렇게 할 것입니다. 결국 당신이 필요로하는 것이 아닙니까? 또는 원하는 것은 모든 값을 인쇄하는 것입니다. – Yaroslav

+0

당신이 그것을 부를 때마다,'table B'에서 선택된 행에 대해'last_id'가 다음의 더 큰'id'까지 증가 할 것입니다. – Novak

1

다음 스 니펫은 의사 코드입니다.

  1. 잡아 다음 table_aid :

    SELECT id FROM table_a WHERE id > $currentLastId ORDER BY id ASC LIMIT 1 
    
  2. 하지 null 경우 table_blast_id 열을 업데이트합니다.

예 :

SQL 쿼리가 될 것이다 (table_b 첫 번째 행 참조) :

SELECT id FROM table_a WHERE id > 1 ORDER BY id ASC LIMIT 1 

3을 반환합니다.