mysql – doctrine – 获取下一个和prev记录

前端之家收集整理的这篇文章主要介绍了mysql – doctrine – 获取下一个和prev记录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

只是所以我已经取得了一些记录.我有’创建’的日期字段,现在我希望按日期获得下一个和上一个记录.

得到它的工作:

    $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或前一个元素.

$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);

猜你在找的MySQL相关文章