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

如何在mysql中跳转到下一个id,mysql,sql,Mysql,Sql,我有一个课程内容表和课表,如下所示 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

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

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 )

我会这样做:

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

什么是课程号,课程号,课程号,课程号,课程号。为什么我应该通过两个课程和两个序列号当我提供当前课程的最后一个内容id时,它应该跳转到下一个课程,并给出该课程id和该课程的第一个内容id。seq_no用于内容排序,lesson_no用于课程排序@Spencer7593我不想通过课程编号和seq no,而是我将通过当前课程id和内容id。根据seq_no自动下一个内容id,如果内容id结束,则应根据课程编号下一个课程idcome@Lavanya:然后您需要查找当前行的seq_no和lesson_no,基于您拥有的值content_id。然后seq_no和lesson_no的值可以传递到查询中以获取下一条记录。我们可以将seq_no和lesson_no的查询滚动到一个内联视图中,这样它就可以在一个查询中合并在一起,