簡體   English   中英

MySQL在一個查詢中選擇所有數據並更新

[英]MySQL SELECT all datas and UPDATE in one query

我有3張桌子。 其中之一存儲users_data。

我運行此sql代碼:

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

結果是這樣的:

在此處輸入圖片說明

我有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 sql時更新用戶位置。

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 |
+-----+----------+----------+
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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM