如何在MySQL中洗牌?

时间:2018-06-13 04:56:12

标签: php mysql sql

我们说我有一个包含2列的表:id(主键)和名称。现在这个表是按名称排序的,但我想将所有行洗牌并将id更改为随机数。我怎么能这样做?

是否可以使用update命令并将id设置为这样的随机唯一编号?

UPDATE mytable SET id = **GENERATE UNIQUE NUMBER**

P.S。这张桌子是独立的。 Id不是另一个表的外键。

enter image description here

2 个答案:

答案 0 :(得分:2)

我建议您不要更新表中的主键字段,而只需使用以下查询即可随机获取它们。

SELECT *
FROM mytable
ORDER BY RAND();

或者您可以添加另一个列,您可以在其中添加随机值。像这样

ALTER TABLE mytable
ADD COLUMN rand_id int;

UPDATE MYTABLE SET 
RAND_ID = SELECT RAND()*((SELECT MAX(ID) FROM mytabl)-1)+1;

答案 1 :(得分:0)

如果您需要以随机顺序排列的行,请获取所需的行数,然后在返回的行数组上使用PHP的shuffle函数。在查询中使用ORDER BY RAND()会有相当大的性能损失,具体取决于有多少记录。

不要更改任何ID,因为您将破坏/破坏此表中的记录与任何相关表之间的任何关系。

相关问题