我有一个网站,我想要显示项目。这些项目按以下格式存储在数据库中:
ID Item Active
1 My item 0
2 My item 1
7 My item 1
8 My item 1
10 My item 0
请注意,ID不一定均匀分布。每个项目都是活动的(1)或非活动的(0)。我希望一次激活3个项目,每次调用我的脚本时,我希望下一个项目变为活动状态,最旧的项目变为非活动状态,如下所示:
ID Item Active
1 My item 0
2 My item 0
7 My item 1
8 My item 1
10 My item 1
所以:
ID Item Active
1 My item 1
2 My item 0
7 My item 0
8 My item 1
10 My item 1
我目前正在努力使用算法来考虑上面的第三种情况。我不能只选择活动的最高ID并移动到下一个项目并将其设置为活动状态,同时选择最活跃的ID并使其处于非活动状态。
到目前为止,这是我的代码:
{
for ($i=0;$i<sizeof($videos);$i++)
{
echo $i."]";
if ($videos[$i]->active == 1)
{
if (!isset($first_active))
{
echo "mooh";
echo "[";
echo $first_active = $i;
echo "]";
}
if ( ($i < (sizeof($videos)-1)) && ($videos[$i+1]->active == 0) )
{
$videos[$i+1]->active = 1;
$videos[$i+1]->update();
echo "@".$first_active."|".$videos[$first_active]->id()."@";
$videos[$first_active]->active = 0;
$videos[$first_active]->update();
$first_active = null;
echo "|".$videos[$i+1]->id();
break;
}
elseif ($i == (sizeof($videos)-1))
{
$videos[0]->active = 1;
$videos[0]->update();
$videos[$first_active]->active = 0;
$videos[$first_active]->update();
$first_active = null;
echo "|".$videos[0]->id();
break;
}
}
}
}
这一直有效,直到我结束,例如ID 10.然后正确地使ID 1有效。在下一次调用中,它使ID 7处于活动状态,ID 1处于非活动状态。
我知道如何修复我的代码,2)更聪明地解决这个问题?
提前感谢您的帮助。
答案 0 :(得分:2)
听起来像你实际上需要存储最后一个激活日期而不是简单的开/关标志。
您可以使用两个数据库查询,一个用于按ID的顺序获取完整列表,另一个用于获取按活动日期排序的前3个条目。循环遍历完整列表以按顺序获取所有条目,然后测试每个条目的ID,并使用您的3活动的ID来测试它是否当前处于活动状态。然后,将新项目设置为活动就像更新所需项目上活动列的日期/时间一样简单。
如果你真的想要保持主动开/关标志,那么只需要创建另一个有最后一个活动日期/时间的列。