Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL选择随机行_Php_Mysql - Fatal编程技术网

PHP MySQL选择随机行

PHP MySQL选择随机行,php,mysql,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_frie

我在随机选择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'];
}
$result=num\u rows(“从朋友中选择*,其中成员的id=”。$\u会话['userid'].“”);
如果($result>=6){
$f_num=6;
}否则{
$f_num=$result;
}
对于($i=1;$i,如果您使用:

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

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

首先选择用户拥有的朋友数:

"SELECT COUNT(*) as numFriends FROM friends WHERE member_id='".$_SESSION['userid']."'
…将其放入变量中,我们称之为“$numFriends” 然后:


for($z=0;$z将第八行的
limit 1
更改为
limit 6

没关系,我算出了:)

在开始时,必须使用而不是for:'D

而不是
选择*
,尝试
选择计数(*)
,并使用实际返回值而不是num_行()

你的循环可能会产生重复。我建议尝试OMG Ponies回答


书中有一整章是关于随机选择的。

我发现选择任意数量的随机记录的最佳方法是在查询中使用偏移量

假设您需要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条)


使用偏移量可能不是最好或最有效的方法,但它在大型数据库上对我很有效,不会让它们陷入困境。

只有当这个人有6个或更多的朋友时,才使用偏移量?有点离题,但可以通过在字符串中使用大括号来节省时间。例如,不要使用
“$\u SESSION['userid']”。“
可以使用“{$\u SESSION userid['userid']}”`只有当这个人有6个或更多,是的,很高兴知道:)@Shubham如果它只是一个一维数组,它甚至足够写
“$\u会话[userid]”“
:)我必须在num_行或fetch_数组中使用该查询吗?Order by rand处理大量数据的速度非常慢。这里有一篇文章提供了详细信息和备选方案:
$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
$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
}