我想知道为数据库中的条目创建下一个/上一个按钮的最佳方法是什么。 假设我们有一个包含图像的表格,每个图像都有一个ID和一个路径。 如果当前图像的ID等于“9”,我如何获得下一个和之前的ID?
我已经在这里找到了解决方案 https://stackoverflow.com/a/8874382 但这似乎是最新的选择。如果我们的数据库中有超过10000个条目(图像),这将使服务器不堪重负。首先,它选择所有条目,然后尝试复制数组中的所有结果。在此之后,搜索该阵列的当前ID。这很慢。
我正在考虑对查询设置限制但是如何在此之后获取下一张和之前的图片?
另一个(更好的,我认为)解决方案是获取当前图片的ID并递减/递增它,直到找到具有新ID的另一个图片。我认为这比链接中提供的功能更快。
此外,在同一链接中还有另一个想法,即在当前图片的模型中设置prev_id和next_id。但在这里我们有同样的问题,我们如何找到它们?即使我们找到它们,在当前图片中存储有关上一张/下一张图片的数据是否正确?它似乎不对,但我确信当您需要访问该数据时更方便。
谢谢!
答案 0 :(得分:8)
此查询仅返回下一行/上一行(如果找到)。更好? (应在您的模型类中实现)。
public function getNextId()
{
$record=self::model()->find(array(
'condition' => 'id>:current_id',
'order' => 'id ASC',
'limit' => 1,
'params'=>array(':current_id'=>$this->id),
));
if($record!==null)
return $record->id;
return null;
}
public function getPreviousId()
{
$record=self::model()->find(array(
'condition' => 'id<:current_id',
'order' => 'id DESC',
'limit' => 1,
'params'=>array(':current_id'=>$this->id),
));
if($record!==null)
return $record->id;
return null;
}