如何在mysql中跳转到下一个id

nnsrf1az  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(360)

我有一个课程内容表和课表如下

course_id  lesson_id content_id seq_no
    1         1          1        1
    1         1          2        2
    1         5          3        1
    1         5          4        2
    1         8          12       1  

leson_id lesson_no course_id

   1        1          1
   5        3          1
   8        2          1

我想在我的应用程序中有一个上一个按钮。单击“下一步”时,如果当前课程有下一个内容,则查询应给出下一个内容id,如果当前课程没有下一个内容,则应跳转到下一个课程和第一个内容。内容的序号为序号,课程号为课程号
我提出了以下问题,但我不能跳到下一课
下一次单击:

SELECT * 
FROM course_content
WHERE course_id =1
AND content_id = ( 
SELECT MIN( content_id ) 
FROM course_content
WHERE lesson_id =1
AND content_id >21
ORDER BY seq_no ASC )

上一次单击

SELECT * 
FROM course_content
WHERE course_id =1
AND content_id = ( 
SELECT MAX( content_id ) 
FROM course_content
WHERE lesson_id =1
AND content_id <2
ORDER BY seq_no DESC )
gopyfrb3

gopyfrb31#

我会这样做:

SELECT c.course_id
     , c.lesson_id
     , c.content_id
     , c.seq_no
     , l.lesson_no
  FROM course_content c
  JOIN lesson l 
    ON l.lesson_id = c.lesson_id
 WHERE c.course_id = 1
   AND l.lesson_no     >= :curr_lesson_no
   AND (   c.seq_no     > :curr_seq_no
       OR
           l.lesson_no  > :curr_lesson_no2 
       )
 ORDER
    BY l.lesson_no
       , c.seq_no
   LIMIT 1

只是提供价值观 lesson_no 以及 seq_no 将当前行的
如果我们不能保存 lesson_no 以及 seq_no 我们只有 content_id ,然后我们可以运行一个查询来获取

SELECT cl.lesson_no   AS curr_lesson_no
      , cc.seq_no      AS curr_seq_no
   FROM course_content cc
   JOIN lesson cl 
     ON cl.lesson_id = cc.lesson_id
  WHERE cc.content_id  = :curr_content_id
  ORDER
     BY cl.lesson_no
      , cc.seq_no
  LIMIT 1

我们可以把这两个问题放在一起。。。

SELECT c.course_id
     , c.lesson_id
     , c.content_id
     , c.seq_no
     , l.lesson_no
  FROM ( SELECT cl.lesson_no   AS curr_lesson_no
              , cc.seq_no      AS curr_seq_no
           FROM course_content cc
           JOIN lesson cl 
             ON cl.lesson_id = cc.lesson_id
          WHERE cc.content_id  = :curr_content_id
          ORDER
             BY cl.lesson_no
              , cc.seq_no
          LIMIT 1
       ) q
  JOIN lesson l
    ON l.lesson_no   >= q.curr_lesson_no
  JOIN course_content c
    ON c.lesson_id = l.lesson_id
 WHERE c.course_id = 1
   AND (   c.seq_no     > q.curr_seq_no
       OR
           l.lesson_no  > q.curr_lesson_no 
       )
 ORDER
    BY l.lesson_no
       , c.seq_no
   LIMIT 1

相关问题