zoukankan      html  css  js  c++  java
  • MYSQL 随机数据获取

     以下方法是前提WHERE为空的时候,当存在WHERE的时候效率非常低..

    网上目前流窜着各种取数据的方法,除了

    SELECT s . * , rand( ) AS r
    FROM ko_stars AS s
    ORDER BY r
    LIMIT 5 

    这种超低效率的方法外,好像都存在数据量获取小于指定值的现象,因为网上的普遍方法是随机一个最小ID获取连续的5个记录,但这个最小ID没做好判断,网上版本如下:

    SELECT * 
    FROM `tableAS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2 
    WHERE t1.id >= t2.id 
    ORDER BY t1.id LIMIT 1;

    根据需求的实际情况,本人加已改版

    "SELECT t.*
        FROM `${table}` AS t JOIN (
            SELECT 
                @maxid:=ifnull((FLOOR(RAND() * (SELECT MAX(id) FROM `${table}` as t where ${where}))),0),
                @lid:=ifnull((select id from ${tableas t where ${whereorder by id desc limit ".(${show}-1).",1),0),
                (if(@maxid-@lid>0,@lid,@maxid)+0as id
            ) as mt
            WHERE t.id >= mt.id and ${where}
        ORDER BY t.id LIMIT ${show}";

    本质原理跟上面那个差不多,但这个SQL可以保证取出足量的数据,除非你总数都没有${show}的数量多,那样有几个就返回几个

     

  • 相关阅读:
    再谈Dilworth定理
    区间动态规划
    单调队列优化动态规划
    暑假集训考试R2 konomi 慕
    NOIP 2000 计算器的改良
    2007 Simulation message
    COCI 2003 LIFTOVI 电梯 SPFA
    NOIP 2003 数字游戏
    USACO 2014 DEC Guard Mark 状态压缩
    使用HttpClient发送GET请求
  • 原文地址:https://www.cnblogs.com/liushannet/p/2223606.html
Copyright © 2011-2022 走看看