簡體   English   中英

PHP MySQL選擇隨機行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM