如何检索MySQL记录列表中的下一项?

时间:2013-02-28 23:28:13

标签: php mysql symfony-1.4 propel

我正在使用sypel使用Propel尝试为后退和下一个按钮创建功能:

$c = new Criteria();

$c->add(CartPeer::CATEGORY, $category);
$c->add(CartPeer::ITEM_ID, $item->getItemId(), Criteria::GREATER_THAN);
$c->addAscendingOrderByColumn(CartPeer::ITEM_NAME);

$this->next = CartPeer::doSelectOne($c);

现在,如果项目的标识符按升序排列,则此方法可以正常工作,但通常情况并非如此。

如何修改此代码,以便在返回的记录列表中的当前$item之后立即选择项目,而不是选择具有下一个升序数字ID的项目?

示例:

Record: 0 | ItemID: 5
Record: 1 | ItemID: 2
Record: 2 | ItemID: 7 <-- $item
Record: 3 | ItemID: 4 <-- I want this to be $next
Record: 4 | ItemID: 9

1 个答案:

答案 0 :(得分:1)

我实际上并没有使用Symfony,但如果您使用的是最新版本的Propel,那么您可以访问paginate() method,这对您来说可能会更好。< / p>

$pager = CartQuery::create()
           ->filterByCategory($category)
           ->orderBy(CartPeer::ITEM_NAME)
           ->paginate($pageToLoad, $resultsPerPage);
foreach($pager as $result) {
  // do something with the record
}
if ($pager->haveToPaginate()) {
  // build some paging items using PropelModelPager methods:
  if (!$pager->isFirstPage()) {
    echo "<a href='?page=".$pager->getPreviousPage()."'>Previous</a>";
  }
  if (!$pager->isLastPage()) {
    echo "<a href='?page=".$pager->getNextPage()."'>Next</a>";
  }
}

如果你真的想按自己的方式去做,你可能想完全消除ItemId的限制,只需添加一个偏移量和你的限制:

// This will be however many results have already been shown (page size?)
$offset = 10;

$c = new Criteria();
$c->add(CartPeer::CATEGORY, $category);
$c->addAscendingOrderByColumn(CartPeer::ITEM_NAME);
$c->setOffset($offset);
$this->next = CartPeer::doSelectOne($c);