PHP MySQL选择随机行

End*_*vde 7 php mysql

我在选择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'];
}
Run Code Online (Sandbox Code Playgroud)

如果登录用户有多于或等于6个朋友,我想选择6个随机朋友

坚持这一段时间了:/

谢谢你的帮助 :)

OMG*_*ies 17

如果您使用:

  SELECT * 
    FROM friends 
   WHERE member_id = '".$_SESSION['userid']."' 
ORDER BY rand() 
   LIMIT 6
Run Code Online (Sandbox Code Playgroud)

如果此人只有3个朋友,则查询将仅显示这三个 - 这并不意味着查询将始终返回六行.

  • 按rand排序很快就会有大量数据. (7认同)
  • 这里有一篇文章,其中包含详细信息和替代方案:http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from -桌子/ (2认同)

小智 5

我发现选择任意数量的随机记录的最佳方法是在查询中使用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
Run Code Online (Sandbox Code Playgroud)

现在我们将从上面的总数中得到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
}
Run Code Online (Sandbox Code Playgroud)

使用OFFSET可能不是最好的或最有效的,但它在大型数据库上对我有用,而不会让它们陷入困境.