我在选择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个随机朋友
现在坚持了一段时间:/
感谢您的帮助:)
答案 0 :(得分:17)
如果您使用:
SELECT *
FROM friends
WHERE member_id = '".$_SESSION['userid']."'
ORDER BY rand()
LIMIT 6
如果此人只有3个朋友,则查询将只显示这三个 - 这并不意味着查询将始终返回六行。
答案 1 :(得分: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
现在我们将从上面的总数中获得6个随机记录(希望它是&gt; 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可能不是最好或最有效的,但它对我来说在大型数据库上有效,而不会让它们陷入困境。
答案 2 :(得分:1)
没关系,我明白了:) 不得不使用而 :'D
答案 3 :(得分:0)
首先选择用户拥有的朋友数量:
"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
}
答案 4 :(得分:0)
在第八行将limit 1
更改为limit 6
。
答案 5 :(得分:0)
而不是SELECT *
开头,请尝试SELECT COUNT(*)
并使用实际的返回值而不是num_rows()。
您的循环可能会生成重复项。我建议尝试OMG小马的回答。
书中SQL Antipatterns有一整章关于随机选择。