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