我有一个查询,它从数据库中提取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`;