mysql中怎么随机查询 sql语句随机查询

如何用 mysql 按概率随机查询

这里提供一个思路。先算出表的每条记录里某字段值的概率,然后根据某个特定的概率作筛选条件,再用随机函数和limit关键字取出符合该特定概率的若干条记录。

成都创新互联10多年企业网站制作服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站制作及推广,对展览展示等多个方面拥有丰富的网站推广经验的网站建设公司。

怎么从mysql表中随机取数据

从mysql数据库表中随机获取数据

其实,从数据库随机获取数据,很简单,只须用到一个rand()函数;

select * from table_name order by rand() limit 0,5;

下面是一个小实例:

从文章表中随机获取5条数据。

$dblink=mysql_connect("localhost","root","123456");

mysql_query("set names utf8");

mysql_select_db("aixuexi");

$sql="select * from waxx_article order by rand() limit 0,5";

$rs=mysql_query($sql);

while($row=mysql_fetch_array($rs)){

$rows[]=$row;

}

if($rows){

foreach($rows as $v){

?

div style="width:350px;height:35px;line-height:35px;border:1px solid #ccc;"?php echo $v['title']; ?/div

?php

}

}else{

echo "暂无文章";

}

MYSQL随机抽取查询 MySQL Order By Rand()效率问题

要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT

*

FROM

tablename

ORDER

BY

RAND()

LIMIT

1。

但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER

BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL

3.23版本中,仍然可以通过ORDER

BY

RAND()来实现随机。

但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上。查看官方手册,也说rand()放在ORDER

BY

子句中会被执行多次,自然效率及很低。

复制代码

代码如下:

You

cannot

use

a

column

with

RAND()

values

in

an

ORDER

BY

clause,

because

ORDER

BY

would

evaluate

the

column

multiple

times.

搜索Google,网上基本上都是查询max(id)

*

rand()来随机获取数据。

复制代码

代码如下:

SELECT

*

FROM

`table`

AS

t1

JOIN

(SELECT

ROUND(RAND()

*

(SELECT

MAX(id)

FROM

`table`))

AS

id)

AS

t2

WHERE

t1.id

=

t2.id

ORDER

BY

t1.id

ASC

LIMIT

5;

但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。

下面的语句采用的是JOIN,mysql的论坛上有人使用

复制代码

代码如下:

SELECT

*

FROM

`table`

WHERE

id

=

(SELECT

FLOOR(

MAX(id)

*

RAND())

FROM

`table`

)

ORDER

BY

id

LIMIT

1;

再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。

完整查询语句是:

复制代码

代码如下:

SELECT

*

FROM

`table`

2

WHERE

id

=

(SELECT

floor(

RAND()

*

((SELECT

MAX(id)

FROM

`table`)-(SELECT

MIN(id)

FROM

`table`))

+

(SELECT

MIN(id)

FROM

`table`)))

3

ORDER

BY

id

LIMIT

1;

复制代码

代码如下:

SELECT

*

FROM

`table`

AS

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;

最后在php中对这两个语句进行分别查询10次,

前者花费时间

0.147433

后者花费时间

0.015130

看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多。

SQL、MySQL、Oracle随机查询语句?

1、Oracle查询结果集,随机排序

select * from tableName order by dbms_random.value();

2、MySQL随机查询,随机排序

SELECT * FROM tableName ORDER BY rand()

3、SQL随机查询,随机排序

SELECT *  FROM tableName  ORDER BY NEWID()

4、Oracle随机查询20条

select * from

select  *  from tableName    order by dbms_random.value

)

where rownum = 20;

5、My SQL随机查询20条

select  *  from  tableName  order by rand() limit 20

6、MS SQL Server随机查询20条

select top 20  * from  tableName order by newid()

如何从mysql数据库中随机获取任意条数据?

随机读取可用newid(),取一条可用top 1

举例:如在表test中随机抽取一条未被读取的数据,执行语句为:

select?top?1?*?from?test?order?by?newid()第一次执行结果:

第二次执行结果:

结论:两次执行结果有可能一样,也有可能不一样,也就是实现了随机的效果。

mysql执行新增时某个字段随机执行

1:你要随机更新的话。要先查几条随机数据。然后根据查询的数据一个特定字段去更新。但是又不能在查询的时候同时更新。会报错。要先将查询出来的存储到临时表。再进行修改。

下面是我的s_grader 表结构和我的SQL语句。就实现了随机查询两条。然后进行修改。要随机修改几条就把Limit后面的2改成几。亲测可行。

UPDATE s_grader SET Sgrad='999' WHERE Sname in ( SELECT F.Sname FROM (SELECT * FROM s_grader ORDER BY RAND() LIMIT 2) F)


本文标题:mysql中怎么随机查询 sql语句随机查询
转载注明:http://scjbc.cn/article/hgipji.html

其他资讯