php-mysql:记住以前的RAND()


php mysql: remember previous RAND()

我有一个查询,它从数据库中提取2个随机行:

  $query  = "SELECT * FROM foo ORDER BY RAND() LIMIT 2";
  $result = mysql_query($query);

我想要的是记住所选的2个项目,这样它们就可以在下一页上再次显示。我曾想过,这可以通过用RAND()信息更新另一个表来完成,但就我而言,我无法思考如何做到这一点,也找不到如何做的信息。

编辑:总体思路是显示2个新项目以及最后2个项目。

编辑2:

好的,所以看起来它需要使用SESSIONS来完成,到目前为止我已经提出了这个问题,但结果是当前的项目信息,而不是以前的

$item_array = array($item_id);
$_SESSION['lastitems'] = $item_array;
foreach($_SESSION['lastitems'] as $key=>$value) {
 echo $value . ' <br />';
}

问题是,我认为$item_id实际上是$row['itemid'],只能从while循环中调用,因此像我之前所说的SESSIONS是当前项目信息,而不是以前的信息。我如何"存储"以显示以前的信息?

编辑3:我把上面的foreach卡在循环之外,但它只返回1项

您不能在随后的两个页面中获得相同的order by rand()——这就是按rand排序的全部意义所在。

如果你想记住下一页上的数据,为什么不把输出粘贴到$_SESSION中,并简单地引用它呢?

话虽如此,可以rand()函数中沿着order by rand(3)的行设置一个值,这将给您带来相同的结果,但这会打开一个蠕虫罐头,您需要开始将相同的种子传递到其他页面,您可能必须将其存储在$_SESSION中,这样您就可以获得平方一。

编辑:如果要添加2个新项,请按原样使用查询,并继续将数据插入$_SESSION变量中。你可以在那里存储数组,所以它应该很有魅力。将数据拉回来,添加到会话中,显示会话中的所有结果。下一页,获取两个新结果,添加到会话中,显示会话中的所有结果。

编辑2:

首先,确保你在每个页面上都开始了会话:

session_start();

您希望像对待任何其他数组一样对待$_SESSION数组:

$query  = "SELECT * FROM foo ORDER BY RAND() LIMIT 2";
$result = mysql_query($query);

不确定在输出之前如何迭代结果,所以请根据需要应用:

howeverYouLoopYouQueryResults
{
    $_SESSION['lastitems'][]=$rowFromYourResult;
    // This appends the row to the end of the array
}

现在,当你开始显示数据时,你可以按照以下方式进行操作:

foreach($_SESSION['lastitems'] as $key=>$value) {
    echo $value . ' <br />';
    // Keep in mind that it will be storing ALL the 
    // items from the row because you used 'select *'
    // You can see what you selected with:
    print_r($_SESSION['lastitems'];
}

通常,如果您想随机化顺序,然后使用该顺序,只需将排序信息保存在表中即可。只需确保很少执行第一个查询,因为它会更改顺序。第二个查询只是根据先前确定的顺序提取数据。

第一个查询可以将随机排序保存到其中一列中:

UPDATE `foo` SET `ordering`=RAND();

然后在订购时使用:

SELECT * FROM `foo` ORDER BY `ordering`;