[英]PHP MySQL select random rows
我在選擇6個隨機朋友時遇到問題
這是我到目前為止的查詢:
$result = num_rows("SELECT * FROM friends WHERE member_id = '".$_SESSION['userid']."'");
if($result >= 6) {
$f_num = 6;
} else {
$f_num = $result;
}
for($i = 1; $i <= $f_num; $i++) {
$q_get_member_friends = mysql_query("SELECT * FROM friends WHERE member_id = '".$_SESSION['userid']."' ORDER BY rand() LIMIT 1");
$r_get_member_friends = mysql_fetch_array($q_get_member_friends);
echo $r_get_member_friends['friend_with'];
}
如果登錄用戶有多於或等於6個朋友,我想選擇6個隨機朋友
堅持這一段時間了:/
謝謝你的幫助 :)
如果您使用:
SELECT *
FROM friends
WHERE member_id = '".$_SESSION['userid']."'
ORDER BY rand()
LIMIT 6
如果此人只有3個朋友,則查詢將僅顯示這三個 - 這並不意味着查詢將始終返回六行。
我發現選擇任意數量的隨機記錄的最佳方法是在查詢中使用OFFSET。
假設你想要6個隨機記錄,所以我將借用上面的答案並計算數據庫中朋友的總數。
$sql = mysql_query("SELECT COUNT(*) AS total FROM friends WHERE member_id='". $_SESSION['userid'] ."'");
$get_count = mysql_fetch_array($sql); // Fetch the results
$numfriends = $get_count['total']; // We've gotten the total number
現在我們將從上面的總數中得到6個隨機記錄(希望它> 6),
$query = mysql_query("SELECT * FROM friends WHERE member_id='". $_SESSION['userid'] ."' LIMIT 6 OFFSET " . (rand(0, $numFriends));
while ($rows = mysql_fetch_array($query))
{
/// show your $rows here
}
使用OFFSET可能不是最好的或最有效的,但它在大型數據庫上對我有用,而不會讓它們陷入困境。
沒關系,我想通了:)
同時有不使用:'d
首先選擇用戶擁有的朋友數量:
"SELECT COUNT(*) as numFriends FROM friends WHERE member_id='".$_SESSION['userid']."'
...把它放到變量中,我們稱之為“$ numFriends”然后:
for($z=0;$z<6;$z++)
{
$randomFriendIndex = rand(1,$numFriends);
//Get the friend at that index
}
將limit 1
更改為第8行的limit 6
。
而不是在開頭使用SELECT *
,嘗試SELECT COUNT(*)
並使用實際的返回值而不是num_rows()。
你的循環可能會生成重復。 我建議嘗試OMG小馬的答案。
SQL Antipatterns一書中有關於隨機選擇的整章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.