我有一个简单的表,结构如下,行数很多:
id | name | title |
------------------------------
需要将id
替换为其他值,换句话说,我需要永久随机播放我的表格。我需要运行什么查询?这个查询我需要运行一次......无论需要多长时间或内存。
答案 0 :(得分:2)
以下查询应该执行以下操作:
- 整个id设置将与之前相同,只需将iid洗牌;
tbl
是要更新的- 生成随机row_num
tbl2
为tbl
- 生成随机(不同于以上)row_num
tbl3
为tbl3
- 使用
tbl2.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;
答案 1 :(得分:2)
考虑到您的行大小为800,您可以执行类似下面的操作:
创建一个包含表格所有记录的临时表。
e.g。 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;
。答案 2 :(得分:0)
您可以使用shuffle logic
将数据库VIEW
用于您的目的
否则使用另一个表来备份当前表,然后SELECT
从备份表中随机播放行。然后TRUNCATE
表,然后从备份表的select查询中插入shuffle行。