2016-09-04 2 views
0

나는 3 개의 테이블을 가지고 있습니다. 그들 중 하나는 users_data를 저장합니다.MySQL은 하나의 쿼리에서 모든 데이터와 UPDATE를 선택합니다.

나는이 SQL 코드 실행

SELECT @rownum := @rownum + 1 AS position, 
user_id, score, user_type 
FROM users_data 
ORDER BY score DESC 

과 같은 결과 :

enter image description here

을하고 내가 좋아하는 사용자를 위해이

2 테이블이 그 내 테이블

users1 

+----+----------+----------+ 
| id | username | position | 
+----+----------+----------+ 
| 1 | uname |  0 | 
| 2 | uname2 |  0 | 
| 3 | uname3 |  0 | 
| 5 | uname5 |  0 | 
| 11 | uanme11 |  0 | 
| 12 | uname12 |  0 | 
+----+----------+----------+ 

users0 

+-----+----------+----------+ 
| id | username | position | 
+-----+----------+----------+ 
| 1 | uname |  0 | 
| 111 | uname111 |  0 | 
| 138 | uname138 |  0 | 
| 241 | uname241 |  0 | 
+-----+----------+----------+ 

SELECT 쿼리를 실행하는 동안 사용자 위치를 업데이트하고 싶습니다.

if user_type is 0, update users0.position = @rownum 
if user_type is 1, update users1.position = @rownum 

결과는 다음과 같이해야합니다 :

users1 

+----+----------+----------+ 
| id | username | position | 
+----+----------+----------+ 
| 1 | uname |  1100 | 
| 2 | uname2 |  1100 | 
| 3 | uname3 |  1075 | 
| 5 | uname5 |  1075 | 
| 11 | uanme11 |  1075 | 
| 12 | uname12 |  1175 | 
+----+----------+----------+ 

users0 

+-----+----------+----------+ 
| id | username | position | 
+-----+----------+----------+ 
| 1 | uname |  1075 | 
| 111 | uname111 |  1025 | 
| 138 | uname138 |  1025 | 
| 241 | uname241 |  1025 | 
+-----+----------+----------+ 
+0

왜 선택 쿼리 또는 INNER뿐만 아니라 가입과 갱신을 시도하지? 당신은 어떻게 입장을 유지하고 있으며 어떤 테이블에 그것이 존재합니까? –

답변

1
update users1,users0 
set users1.position = (
      select v.position 
      from 
      (SELECT 
      @rn1 := @rn1 + 1 AS position, 
      users_id, score, user_type 
      FROM (select @rn1:=0) rn, users_data ud 
      ORDER BY score DESC 
      ) v 
      where v.users_id = users1.id and v.user_type = 1 
      ) 
, 
    users0.position = (
     select s.position 
     from 
     (SELECT 
     @rn := @rn + 1 AS position, 
     users_id, score, user_type 
     FROM (select @rn:=0) rn, users_data ud 
     ORDER BY score DESC 
     ) s 
     where s.users_id = users0.id and s.user_type = 0 
     ) 

where 1 = 1 
; 

결과

+-----+------+----------+----------+ 
| src | id | username | position | 
+-----+------+----------+----------+ 
| u1 | 12 | uname12 |  1 | 
| u1 | 1 | uname |  2 | 
| u1 | 2 | uname2 |  3 | 
| u1 | 11 | uanme11 |  4 | 
| u1 | 5 | uname5 |  5 | 
| u1 | 3 | uname3 |  6 | 
| u0 | 1 | uname |  7 | 
| u0 | 111 | uname111 |  8 | 
| u0 | 138 | uname138 |  9 | 
| u0 | 241 | uname241 |  10 | 
+-----+------+----------+----------+ 
10 rows in set (0.00 sec)