我有以下結構簡單的表,很多行:如何在我的MySQL表中永久地洗牌ID?
id | name | title |
------------------------------
需要與其他值來代替id
,換句話說,我需要永久洗牌我的表。我需要運行什麼查詢?這個查詢我需要運行一次......不管需要多長時間或記憶。
我有以下結構簡單的表,很多行:如何在我的MySQL表中永久地洗牌ID?
id | name | title |
------------------------------
需要與其他值來代替id
,換句話說,我需要永久洗牌我的表。我需要運行什麼查詢?這個查詢我需要運行一次......不管需要多長時間或記憶。
考慮到你的行大小是800,你可以d類似於波紋管:
創建一個包含表的所有記錄的臨時表。
例如CREATE TABLE TMP_TABLE (SELECT * FROM YOUR_TABLE)
。
DROP TABLE YOUR_TABLE;
。
CREATE TABLE YOUR_TABLE (SELECT * FROM TMP_TABLE ORDER BY RAND())
DROP TABLE TMP_TABLE;
。下面的查詢應該做的是以下幾點:
- 整個ID組會和以前一樣,只是洗牌的ID;
tbl
是一個更新tbl2
生成用於tbl
tbl3
生成隨機與tbl2.row_num1 = tbl3.row_num2
隨機ROW_NUM ROW_NUM(以上述不同)爲tbl3
- ,洗牌完成
UPDATE tbl INNER JOIN
(SELECT *, (@rm1 := @rm1 + 1) as row_num1 FROM tbl CROSS JOIN (SELECT @rn1 := 0) param ORDER BY RAND()) tbl2
ON tbl.id = tbl2.id
INNER JOIN
(SELECT *, (@rm2 := @rm2 + 1) as row_num2 FROM tbl CROSS JOIN (SELECT @rn2 := 0) param ORDER BY RAND()) tbl3
ON tbl2.row_num1 = tbl3.row_num2
SET tbl.id = tbl3.id;
您可以使用數據庫VIEW
使用洗牌邏輯
否則使用另一個表來備份當前表你的目的,然後SELECT
洗牌行從備份表。然後TRUNCATE
您的表,然後從備份表的選擇查詢中插入shuffle行。
你能給現有的'id'添加一個隨機數嗎?或者你想排列他們? – ritesht93
隨機排列*物理*還是隻需要更改''id''列? – mmuzahid
我需要洗牌*物理*,整個集ID可能與以前相同,但它不必。我目前的'id'範圍是從1 - 800? –