php隨機不重複查詢mysql資料庫

2021-10-09 14:57:40 字數 2149 閱讀 4356

(文中的**就不替換了,直接貼上自己的了。)

$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");
這個問題是重複率很高。(如下)

也試圖在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 = ");

至於為什麼不用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

$items = mysqli_fetch_assoc($result);

$items["types"] = $types;

}else if ($types == 1) ");

$items = mysqli_fetch_assoc($result);

$items["types"] = $types;

}else if ($types == 2) ");

$items = mysqli_fetch_assoc($result);

$items["types"] = $types;

}//判斷是否有重覆記錄,有繼續迴圈,無記錄到陣列並跳出迴圈。

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

//輸出資料

那我也不太清楚這樣效率是否高,我這也沒有很多的資料,這就是我目前想到的方法了。

不重複隨機數

1 不重複隨機數1 生產 lowerbound,upperbound 的隨機數,核心 int upperbound lowerbound 1 rnd lowerbound 示例 如下 sub rndnumnorepeat1 dimdic dim i set dic createobject scri...

SQL學習之去重複查詢

下面是一張表的資料 執行select content from dbo.logo,返回以下結果 但是這個時候我們只需要相同的內容中的乙個即可,但是查詢出來的明顯有很多重複的,所以我們只需要在需要查詢的字段前加上distinct關鍵字即可,所以執行以下 select distinct content ...

生成多個不重複的隨機數字php

這個沒什麼好廢話的 直奔主題來說思路 首先是要用mt rand 函式生成指定個數的隨機數字 然後使用array unique 函式去重 因為去重了 所以得到的數字就不夠指定個數了 所以 核心是要用while迴圈 直到得到指定個數的數字 到這裡基本可以是結束了 對於追求完美的人來說 還可以再用個sor...