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

dawei

【声明】:丽水站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章