mysql如何随机的从数据表中多次选取不重复的数据?

  • Post author:
  • Post category:mysql

前言

        当我们在数据表中随机选取记录时,我们不希望在之后的选取过程中选到重复记录时,可参考以下示例:

        本次示例是从一个含10组记录数据的表中随机选取5个(可改为取1个,多次运行即可)记录,且每次选取结果都不重复。

提示:以下是本篇文章正文内容,下面案例可供参考

1.示例表(td_select_num)

代码如下(示例):(主键、属性自己加)

CREATE TABLE `td_select_num` (
    `id` SMALLINT (5) COMMENT 'id编号',
    `sn` SMALLINT (5) COMMENT '所要提取的数据--自定义',
    `slt_sign` SMALLINT (5) COMMENT '选取标记,0为未选取过'
); 
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('1','4','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('2','9','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('3','13','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('4','20','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('5','7','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('6','32','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('7','2','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('8','24','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('9','7','0');
INSERT INTO `td_select_num` (`id`, `sn`, `slt_sign`) VALUES('10','10','0');

2.相关代码

代码如下(示例):变量可自己先声明

SET @n=1;
WHILE @n < 6 DO  # 数值6 可改为2 ,每次只取1条不重复记录
        SET @i=0,@j=0;
        SET @max_id = (SELECT COUNT(1) FROM td_select_num WHERE slt_sign=0); # 查询未被随机选取的总记录数
        SET @num_random=1+FLOOR(RAND() * @max_id); # 在未被选中的总记录数中给出一个随机数
        
        # 在未被选中的id编号列(可不连续)组合一个按顺序连续自增的虚拟列i,并以i作为随机数的定位,提取id编号
        SELECT @j:=a.id,@i FROM (SELECT id FROM td_select_num WHERE slt_sign=0) a WHERE (@i:=@i+1)<=@num_random; 
        UPDATE td_select_num SET slt_sign = 1 WHERE id = @j; # 将选中的记录的选取标记更新为1,表示已选取过         
        SELECT sn FROM td_select_num WHERE id=@j; # 得到随机选取出的记录--自定义
        SET @n=@n+1; # 继续循环提取数据
END WHILE;


总结

相关链接:mysql如何从数据表中一次随机选取五个不重复的记录?_hz丶长路曼曼的博客-CSDN博客

本文为示例方法,可供参考,具体需求还需具体分析,如有意见和问题,欢迎评论区留言

如有帮助到你,点波关注。如有侵权请私信删除


版权声明:本文为weixin_42825317原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。