php mysql:记得以前的RAND()

时间:2012-08-05 05:05:20

标签: php mysql session

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

2 个答案:

答案 0 :(得分:5)

你不能在后面的两个页面中得到相同的order by rand() - 这是rand首先排序的全部内容。

如果您想记住下一页的数据,为什么不将输出粘贴到$_SESSION并简单地在那里引用?

话虽如此,你可以<{1}}为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'];
}

答案 1 :(得分:2)

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

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

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

然后在订购时使用它:

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