从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

一、总结

一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= ((SELECT MAX(id) FROM table)-(SELECT MIN(id) FROM table)) * RAND() + (SELECT MIN(id) FROM table)  LIMIT n";

1、thinkphp里面没有封装mysql中的Rand()方法,如何在thinkphp实现join其它表加随机取数据?

可以先拼接数据,也可以后拼接数据,完全都ok的

所以可以在thinkphp里面用原生的sql语言取出一条随机数据,然后再和其它表拼接

拼接数据表的另外一种思路,先查数据然后再拼接。

 1     //3、一个完完全全随机的从题库中获取题目的函数
2 public function battle_entirely_random_question(){
3 //可以先拼接数据,也可以后拼接数据,完全都ok的
4 $data=Db::query("SELECT * FROM lg_blog_question WHERE bq_id >= (((SELECT MAX(bq_id) FROM lg_blog_question)-(SELECT MIN(bq_id) FROM lg_blog_question)) * RAND() + (SELECT MIN(bq_id) FROM lg_blog_question)) LIMIT ?",[5]);
5 //dump($data);die;
6 if($data){
7 shuffle($data);
8 if(isset($data[0])){
9 $blogModle=new Blog();
10 $blogData=$blogModle->getBlogDateById($data[0]['bq_b_id']);
11 if(!$blogData) return false;
12 $result=array_merge($data[0],$blogData);
13 dump($result);die;
14 //拼接
15 return $data[0];
16 }
17 return false;
18 }else{
19 return false;
20 }
21 }

二、从数据表中随机抽取n条数据的几种方法

1、"SELECT * FROM table ORDER BY RAND() LIMIT n";

2、"SELECT *, myrand as RAND() FROM table ORDER BY myrand LIMIT n";

3、"SELECT * FROM table WHERE id >= ((SELECT MAX(id) FROM table)-(SELECT MIN(id) FROM table)) * RAND() + (SELECT MIN(id) FROM table)  LIMIT n";

前两种速度差不多,都比较慢,不推荐使用,最后一种是在最大ID和最小ID中随机抽取,速度非常快。

三、SQL

1.MS SQL Server,随机查询20条

select top 20  * from  表名order by newid()

2.My SQL:,随机查询20条

select  *  from  表名 order by rand() limit 20

你可以试试这个: select * from xx order by rand() limit 10

四、thinkphp

可在thinkphp使用原生查询解决这个问题

支持在原生查询的时候使用参数绑定,包括问号占位符或者命名占位符,例如:

Db::query("select * from think_user where id=? AND status=?",[8,1]);
// 命名绑定
Db::execute("update think_user set name=:name where status=:status",['name'=>'thinkphp','status'=>1]);

原生查询可以带参数,很方便的。

     //3、一个完完全全随机的从题库中获取题目的函数
public function battle_entirely_random_question(){
//可以先拼接数据,也可以后拼接数据,完全都ok的
$data=Db::query("SELECT * FROM lg_blog_question WHERE bq_id >= (((SELECT MAX(bq_id) FROM lg_blog_question)-(SELECT MIN(bq_id) FROM lg_blog_question)) * RAND() + (SELECT MIN(bq_id) FROM lg_blog_question)) LIMIT ?",[5]);
//dump($data);die;
if($data){
shuffle($data);
if(isset($data[0])){
$blogModle=new Blog();
$blogData=$blogModle->getBlogDateById($data[0]['bq_b_id']);
if(!$blogData) return false;
$result=array_merge($data[0],$blogData);
dump($result);die;
//拼接
return $data[0];
}
return false;
}else{
return false;
}
}
 

从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)的更多相关文章

  1. 从mysql数据表中随机取出一条记录

    核心查找数据表代码: ; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. S ...

  2. 转: 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  3. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  4. laravel如何从mysql数据库中随机抽取n条数据

    laravel如何从mysql数据库中随机抽取n条数据 一.总结 一句话总结: inRandomOrder():$userQuestions=UserQuestion::where($map)-> ...

  5. TODO:从数据库中随机抽取一条记录

    TODO:从数据库中随机抽取一条记录 1.最直接,最粗暴的方法先计算记录的总数,然后选择一个从0到记录总数之间的随机数n,利用skip跳过n条记录,这是效率低下的的方法,首先的记录总数,在用skip会 ...

  6. postgresql-从表中随机获取一条记录

    目录 postgresql如何从表中高效的随机获取一条记录 随机获取一条记录random() 改写1 改写2 改写3 对比 注意 结语 postgresql如何从表中高效的随机获取一条记录 selec ...

  7. 从表中随机返回n条记录

    创建测试用表: CREATE OR REPLACE VIEW V AS SELECT 'a' AS c FROM dual UNION ALL SELECT 'b' AS c FROM dual UN ...

  8. 从数据库表中随机获取N条记录的SQL语句

    Oracle: select * from (select * from tableName order by dbms_random.value) where rownum < N MS SQ ...

  9. 查询MYSQl数据表中的最后一条记录

    mysql: select * from table order by id DESC limit 1 oracle: select * from emp where id in (select ma ...

随机推荐

  1. 实现IE下兼容CSS3的圆角效果

    有些CSS3的牛逼的效果在IE下展示不出来是最烦人的啦,在项目中做的圆角效果到了IE下一堆方块....忒尴尬了...,找了个替代解决方案 1.首先下载一个js插件PIE.js百度一搜都是的,我也就不写 ...

  2. 从Java到C++——常量的使用规则

    常量是一种标识符,它的值在执行期间恒定不变.C语言用 #define来定义常量(称为宏常量). C++ 语言除了 #define外还能够用const来定义常量(称为const常量). 一.为什么须要常 ...

  3. Androidbutton事件的五中写法总结

    button事件的五中写法: 1.匿名内部类 2.类实现View.OnClickListener接口 3.创建实例化接口对象 4.使用内部类 5.自己定义方法,配置Android:onclick属性 ...

  4. mongodb与SQL相应关系表

    1. select查询 mongodb使用find或者findOne来查询: find批量查询. findOne是查询一条记录. find有两个參数: 第一个查询条件, 第二个查询返回的字段. 以下是 ...

  5. JAVA基础针对自己薄弱环节总结02(循环)

    循环 A:水仙花. classShuiXianHua { public static void main(String[] args) { for(int i=101;i<1000;i++) { ...

  6. 51nod1004 n^n的末位数字

    题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数N,输出N^N(N的 ...

  7. javafx progressbar

    import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans ...

  8. Kinect 开发 —— 进阶指引 (下)

    运动识别 利用运动识别(motion detection)来进行近景识别是最有意思的一种方式.实现运动识别的基本原理是设置一个起始的基准RGB图像,然后将从摄像头获取的每一帧影像和这个基准图像进行比较 ...

  9. 解决Not allowed to load local resource

    在做视频上传的时候,发现Not allowed to load local resource,也弄了很久,怕自己忘记了所以记下来 bind: function() { SelectVideo.on(& ...

  10. host---域名查询

    host命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常. 选项 -a:显示详细的DNS信息: -c<类型>:指定查询类型,默认值为“IN“: -C:查询指定主机的完整的SO ...