我有一个具有以下结构和许多行的简单表:
id | name | title |
------------------------------需要用其他值替换id,换句话说,我需要永久地洗牌表。我需要运行什么查询?我只需要运行一次..。不管时间和记忆需要多长时间。
发布于 2016-04-05 06:25:18
考虑到您的行大小为800行,您可能会执行以下操作:
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;。发布于 2016-04-05 06:09:51
以下查询应执行以下操作:
tbl是要更新的tbl2为tbl生成随机row_numtbl3为tbl3生成一个随机(不同于上面)的row_numtbl2.row_num1 = tbl3.row_num2,洗牌就完成了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;发布于 2016-04-05 09:41:34
您可以使用洗牌逻辑将数据库VIEW用于您的目的。
否则,使用另一个表备份当前表,然后SELECT对备份表中的行进行洗牌。然后对您的表进行TRUNCATE,然后从备份表的select查询中插入洗牌行。
https://stackoverflow.com/questions/36418167
复制相似问题