2

我有这个查询,它从数据库中获取 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 个项目

4

2 回答 2

6

在随后的两个页面中您无法获得相同order by rand()的结果 - 这就是首先按 rand 排序的重点。

如果您想记住下一页上的数据,为什么不将输出粘贴到 a$_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'];
}
于 2012-08-05T05:06:42.520 回答
2

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

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

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

然后在订购时使用它:

SELECT * FROM `foo` ORDER BY `ordering`;
于 2012-08-05T05:08:41.417 回答