qq_931993061
2021-01-15 15:00
采纳率: 75%
浏览 56

Mysql问题 某一表中随机读取n条连续的数据

从Mysql某一表中随机读取n条连续的数据的SQL查询语句  如何写  不能少于2000条

  • 点赞
  • 收藏

5条回答 默认 最新

  • wuqin_curry 2021-01-15 15:25
    已采纳

    。。。程序中随机生成一个数,作为查询偏移量,然后limit 2000

    点赞 打赏 评论
  • qq_931993061 2021-01-15 15:28

    大佬 能帮忙写下sql语句嘛。。

    点赞 打赏 评论
  • 封印di恶魔 2021-01-15 15:44

    sql就简单的 limit 开始随机数, 2000

    点赞 打赏 评论
  • 封印di恶魔 2021-01-15 15:46

    开始随机数通过后端代码获取   先count表的总数据数   然后生成0至count-2000之间的随机数

    点赞 打赏 评论
  • qq_25376897 2021-01-15 16:03
    -- 如果是纯sql来写,就要处理两个点,一个是产生随机数,用RAND();一个是查询n条数据,用LIMIT
    -- 第一种情况:一定要取够n条
    PREPARE s1 FROM 'SELECT * FROM A LIMIT ?,?'; -- s1 要查询的语句, A表是要查的表
    set @_limit1=(select count(*) from A); -- 获取要查询的数据的总条数
    set @_limit2=(select FLOOR(RAND() * @_limit1));  -- RAND()产生0-1(不含1)的随机数,加上FLOOR和@_limit1,可以随机产生任何一条记录的序号
    set @_limit3=2000; -- 要取的记录条数
    set @_limit4=(select IF(@_limit1-@_limit2<@_limit3,@_limit1-@_limit3,@_limit2)); -- 如果取不够条数,则不是随机数,直接取最后几条数据
    EXECUTE s1 USING @_limit4,@_limit3; -- 执行语句
    
    -- 第二种情况:可以小于n条,即随机到比较靠后的记录,连续下来不足n条数据
    PREPARE s1 FROM 'SELECT * FROM A LIMIT ?,?'; -- s1 要查询的语句, A表是要查的表
    set @_limit1=(select count(*) from A); -- 获取要查询的数据的总条数
    set @_limit2=(select FLOOR(RAND() * @_limit1));  -- RAND()产生0-1(不含1)的随机数,加上FLOOR和@_limit1,可以随机产生任何一条记录的序号
    set @_limit3=2000; -- 要取的记录条数
    EXECUTE s1 USING @_limit2,@_limit3; -- 执行语句
    点赞 打赏 评论

相关推荐 更多相似问题