我有一个从数据库中随机获取两行的查询:

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

我想要的是记住这两个choosen项,以便它们可以在下一页再次显示,我本以为这可以通过使用RAND()信息更新另一个表来完成,但对于我来说,我无法思考如何去做,也无法找到如何去做的信息。
编辑:
总体思路是显示两个新项目以及最后两个项目。
编辑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循环中调用,因此像我之前所说的会话是当前项信息,而不是前一个如何“存储”以便显示前一个?
编辑3:我将上面的foreach卡在循环之外,但它只返回1个项

最佳答案

你不能在接下来的两页中得到相同的order by rand()——这是rand首先排序的全部要点。
如果您想记住下一页的数据,为什么不将输出粘贴到$_SESSION中,并简单地引用它呢?
话虽如此,您可以在rand()函数中添加一个值,该值将为您提供相同的结果,但这将打开蠕虫的容器,您将需要开始将相同的种子传递到其他页面,您可能需要将其存储在order by rand(3)中,这样您就可以在第一个方格中结束。
编辑:如果要添加两个新项,请按原样使用查询,并继续将数据插入$_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'];
}

09-11 19:57
查看更多