php mysql 随机 不重复数据_php随机不重复查询mysql数据库

php随机不重复查询mysql数据库

php随机不重复查询mysql数据库

想完成多个表数据随机查询且不重复,也不太会。百度搜索一番找到一个办法是这样的。

(文中的代码就不替换了,直接粘贴自己的了。)

$result = $mysqli->query("select * from blog order by rand() limit 1");

这个方法的话说是有问题,查询大量数据效率低下,数据少问题不大(不过我这里的数据也不多)。所以又找到了一个随机id来查询。

$result = $mysqli->query("select * from blog where id >= (select floor(max(id) * rand()) from blog) limit 1");

这个问题是重复率很高。(如下)

79681848310f71539c9507adbda2de10.png

也试图在sql语句上下手,看了很多有些看不懂。拿来尝试套上自己的代码有些问题,也许是不要求连续查询出几条的原因,还是好难实现。之后又发现了一个方法,程序内随机id再用于查询(这样来比在sql语句中随机重复的低,测试重复多的几条也许是因为所在表的数据很少10条都不到)。

$blogmaxid = mysqli_fetch_assoc($mysqli->query("select id from blog order by id desc limit 1"))["id"];//先获取到表的最大id

$blogid = rand(1, $blogmaxid);//随机数据

$result = $mysqli->query("select * from blog where id = {$blogid}");

至于为什么不用max(id),因为我这边好像行不通只能绕弯了。(看来的方法也是用max(id))

先查询,mysqli_fetch_assoc() 转成关联数组,最后取出来放到变量。

这个方法重复率会低很多。但是还是有些重复。那我就把先查询出来的存到数组,后查询出来的到数组中比较。重复再次查询(如果某张表数据太少可以随机到其他的表查询),无重复存到数组。最后就这样吧。

$data=array();

$itemspassurl=array();

$quantity = $_GET["quantity"];//前端获取查询条数

//获取各表的最大id

$blogmaxid = mysqli_fetch_assoc($mysqli->query("select id from blog order by id desc limit 1"))["id"];

$videomaxid = mysqli_fetch_assoc($mysqli->query("select id from video order by id desc limit 1"))["id"];

$articlemaxid = mysqli_fetch_assoc($mysqli->query("select id from article order by id desc limit 1"))["id"];

for($i=0;$i

while (true){

$types = rand(0, 2);//随机一张表查询

//$items["types"] = $types;将$types存入数组到时传到前端可以用

if ($types == 0) {

$blogid = rand(1, $blogmaxid);

$result = $mysqli->query("select * from blog where id = {$blogid}");

$items = mysqli_fetch_assoc($result);

$items["types"] = $types;

}

else if ($types == 1) {

$videoid = rand(1, $videomaxid);

$result = $mysqli->query("select * from video where id = {$videoid}");

$items = mysqli_fetch_assoc($result);

$items["types"] = $types;

}

else if ($types == 2) {

$articleid = rand(1, $articlemaxid);

$result = $mysqli->query("select * from article where id = {$articleid}");

$items = mysqli_fetch_assoc($result);

$items["types"] = $types;

}

//判断是否有重复记录,有继续循环,无记录到数组并跳出循环。

if(in_array($items["url"],$itemspassurl) != true){

array_push($itemspassurl,$items["url"]);

$data[] = $items;

break;

}

}

}

//输出数据

$arr = array('json'=>$data);

mysqli_close($mysqli);

echo json_encode($arr);

9166a57d473fff326340e17e74fd99ab.png

那我也不太清楚这样效率是否高,我这也没有很多的数据,这就是我目前想到的方法了。

php随机不重复查询mysql数据库相关教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值