只是所以我已经取得了一些记录.我有’创建’的日期字段,现在我希望按日期获得下一个和上一个记录.
得到它的工作:
$qb = $this->createQueryBuilder('a');
$next = $qb->expr()->gt('a.created',':date');
$prev = $qb->expr()->lt('a.created',':date');
$prev = $qb->select('partial a.{id,title,created}')
->where($prev)
->setParameter('date',$date)
->orderBy('a.created','DESC')
->setMaxResults(1)
->getQuery()
->getArrayResult();
$next = $qb->select('partial a.{id,created}')
->where($next)
->setParameter('date','DESC')
->setMaxResults(1)
->getQuery()
->getArrayResult();
它工作得很好.但这是数据库的2个问题.我需要一个.我可以通过加入等来做到这一点,但是当没有下一个或没有上一个时,我只得到一个空数组.
任何的想法?
最佳答案
亚历山大的回应很接近.当您查询id< 2 LIMIT 1它将返回1,但如果您查询id< 5 LIMIT 1这也将返回1.这是因为它返回1,2,3,4并取第一个元素,即1而不是所需的4.
只需添加ORDER BY ID DESC即可获取上一项.这将返回4,1并且LIMIT 1将返回4或前一个元素.
原文链接:https://www.f2er.com/mysql/433496.html$query = $em->createNativeQuery('SELECT id FROM users WHERE
id = (SELECT id FROM users WHERE id > 2 LIMIT 1)
OR
id = (SELECT id FROM users WHERE id < 2 ORDER BY id DESC LIMIT 1)',$rsm);