-1
$query= "select * from table ORDER BY RAND()" ;
$result = mysql_query($query); 
if(!isset($_get['submit']))
    $_SESSION['a']=$result;
else 
    $result=$_SESSION['a'] ;
while ($row = mysql_fetch_array($result)) {
    echo $row["names"];
}
echo "<input name='submit' type='submit' value='Submit'>";

当然,这不是所有代码,但问题出在:

所以第一个我的页面以随机顺序打开名称(例如约翰丹玛丽)

并在提交表单后(将我带到同一页面),它要么(取决于我尝试过的解决方案)以不同的随机顺序列出名称(Dan Mary John),要么我收到此错误:

Warning: mysql_fetch_array() expects parameter 1 to be resource, 
integer(or array) given in C:\wamp...

我希望在提交表单后名称保持在预先提交的顺序中。

4

4 回答 4

1

如果您的 mysql 表名是“表”,那么您使用保留关键字作为表名使用反引号运算符

$query= "select * from `table` ORDER BY RAND()" ;
于 2013-05-17T14:07:46.053 回答
1

结果 frommysql_query不能以您打算执行的方式缓存。您需要做的是像这样循环遍历行:

$row = array();
while ($r = mysql_fetch_assoc($row)) {
   $row[] = $r;
}
$_SESSION['rows'] = $row;

然后它将在会话中很好地通过并可以重复使用。

除此之外,table是一个保留关键字。使用反引号来逃避它。

如果要技术原因,return frommysql_query其实是一个 MySQL 资源指标,是一个整数。每个新的脚本实例,这些都会被重置。这就是它失败的原因。

PS:ORDER BY RAND() 的性能极差。寻找替代品!

于 2013-05-17T14:08:51.180 回答
0

该脚本不是记住订单,而是记住查询记录集。所以 rand() 函数每次都会重新加载。

if(!isset($_REQUEST['submit']))
{
    $query= "select * from table ORDER BY RAND()" ;
    $result = mysql_query($query); 

    $names = array();

    while ($row = mysql_fetch_array($result)) {
        $names[] = $row['name'];
    }

    $_SESSION['names'] = serialize($names);
}

echo implode(', ', unserialize($_SESSION['names']));
echo "<input name='submit' type='submit' value='Submit'>";

您应该生成名称的随机顺序,将其保存到会话中,然后使用会话输出名称而不是查询

于 2013-05-17T14:09:42.860 回答
0

您得到的错误是您没有返回任何结果,但您仍然试图提取结果。在尝试获取结果之前,您应该使用 mysql_num_rows 检查您的结果集。

如果您希望结果按照提交到数据库的顺序返回,我建议按主键排序(假设您使用 user_id 或其他 ID 作为主键)。

于 2013-05-17T14:10:22.543 回答