簡體   English   中英

如何使用mysql更新設置的記錄數?

[英]How to update set number of records with mysql?

我有一張這樣的桌子:

ID | user_id| game_id

我需要告訴mysql更新game_id =? 其中user_id =? 和game_id = 0以獲取一定數量的記錄(100、250等)。 有沒有一種簡單的方法可以在mysql中執行此操作,還是必須在PHP中執行此操作?

抱歉,我只是太勞累了,對這個問題想得太多。 @德魯說得對。 只需使用LIMIT子句。

UPDATE uc_tickets SET game_id=? WHERE user_id=? AND game_id=0 LIMIT ?

可以使用任何您想要的語言進行呼叫。 它是一個存儲的過程。 請記住,如果您不使用ORDER BY ,它將成為混亂局面。 畢竟我們是冒險的。

架構:

CREATE TABLE myTable
(   id INT AUTO_INCREMENT PRIMARY KEY,
    game_id INT NOT NULL,
    user_id INT NOT NULL
);
INSERT myTable(game_id,user_id) VALUES (1,1),(1,1),(2,2),(33,1);

存儲過程:

DROP PROCEDURE IF EXISTS uspUpdateChunk;
DELIMITER $$
CREATE PROCEDURE uspUpdateChunk
(   p_game_id INT,
    p_user_id INT,
    p_limit INT
)
BEGIN
    SET @sql=CONCAT('UPDATE myTable SET game_id=',p_game_id,' WHERE user_id=',p_user_id,' ');
    SET @sql=CONCAT(@sql,'ORDER BY game_id LIMIT ',p_limit);
    -- select @sql; -- rem out for debugging purposes
    PREPARE stmt1 FROM @sql;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END;$$
DELIMITER ;

測試:

call uspUpdateChunk(777,1,2);
+----+---------+---------+
| id | game_id | user_id |
+----+---------+---------+
|  1 |     777 |       1 |
|  2 |     777 |       1 |
|  3 |       2 |       2 |
|  4 |      33 |       1 |
+----+---------+---------+

是的,僅更新了兩個user_id = 1

所以ORDER BY某物。 id ,隨便。

MySQL手冊頁,標題為“准備好的語句的SQL語法” 似乎總是使用CONCAT() 至關重要的是, @ @sql是用戶變量(帶有@符號),而不是DECLARE的局部變量。 並不是說手冊似乎告訴任何人。 如果您做的不正確,可能會浪費數小時。

暫無
暫無

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

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