加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2020-12-11 23:37:28 所属栏目:MySql教程 来源:网络整理
导读:只是所以我已经取得了一些记录.我有创建的日期字段,现在我希望按日期获得下一个和上一个记录. 得到它的工作: $qb = $this-createQueryBuilder('a'); $next = $qb-expr()-gt('a.created',':date'); $prev = $qb-expr()-lt('a.created',':date'); $prev = $qb

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

得到它的工作:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读