0

これが私のコードです:

$c = new Criteria();
$c->addAscendingOrderByColumn(ItemPeer::ITEM_DATE);
$c->add(ItemPeer::ITEM_DATE, $item->getItemDate(), Criteria::GREATER_THAN);
$this->next = ItemPeer::doSelectOne($c);

これは、2013 年 3 月 1 日と 2013 年 3 月 1 日など、複数の日付が同じ場合を除き、正常に機能します。

これが発生すると、次のものは選択されません。例 (日付順):

Apple     2/27/2013
Banana    2/28/2013
Kiwi      3/1/2013
Dolphin   3/1/2013
ICBM      3/1/2013

現在のアイテムが の場合Banana、次のアイテムは として正しく選択されKiwiます。ただし、現在のアイテムが の場合、Kiwi次のアイテムを見つけることができません。次の日付が同じであっても、常に次の日付を選択するようにしたいと思います。これどうやってするの?

4

1 に答える 1

1

Criteria::GREATER_EQUALの代わりに使用Criteria::GREATER_THAN

編集: ああ、私は今あなたの問題を見ています.2番目の順序基準を追加する必要があります. おそらく、主キーを 2 番目の基準として使用して、一貫した順序を取得し、2 番目の順序を使用して次の項目を決定します。select ... from ... where (item_date > mydate) or (item_date = mydate and id > myid) order by date, id asc基本的に、symfonyに相当するものが必要です。

EDIT2:

$c = new Criteria();
// [item.item_date > $item->getItemDate()]
$crit0 = $c->getNewCriterion(ItemPeer::ITEM_DATE, $item->getItemDate(), Criteria::GREATER_THAN);
// [item.item_date = $item->getItemDate()]
$crit1 = $c->getNewCriterion(ItemPeer::ITEM_DATE, $item->getItemDate());
// [item.id > $item->id]
$crit2 = $c->getNewCriterion(ItemPeer::ID, $item->getId(), Criteria::GREATER_THAN);

// [item.item_date = $item->getItemDate()] *AND* [item.id > $item->getId()]
$crit1->addAnd($crit2);

// [item.item_date > $item->getItemDate()] *OR* [[item.item_date = $item->getItemDate()] AND [item.id > $item->getId()]]
$crit0->addOr($crit1);

$c->add($crit0);
$c->addAscendingOrderByColumn(ItemPeer::ITEM_DATE);
$c->addAscendingOrderByColumn(ItemPeer::ID);

$this->next = ItemPeer::doSelectOne($c);
于 2013-03-01T05:13:22.587 に答える