如何在MySQL中跳转到下一个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

我想在我的应用程序中有一个下一个上一个按钮。如果当前课程有下一课内容,则单击“ next”;如果没有下一课内容,则查询应提供下一个内容ID;如果没有下一课内容,则应跳至下一课和第一课内容。内容的序列号为seq_no,课程为lesson_no

我已在下面进行查询,但无法跳到下一课

下次点击:

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

我会这样:

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_noseq_no


如果我们不能保持lesson_noseq_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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何跳转到GIT difftool中的下一个/上一个差异?

Swift 如何跳转到下一个 uitextfield

如何跳转到下一个 TODO 存根?

如何跳转到项目树中的下一个搜索结果?

我如何跳转到智能感知的下一个输入

YouCompleteMe vim扩展:如何跳转到下一个错误?

如何滚动GNU信息页面而不会意外跳转到下一个节点?

ExpressJS - 如何跳转到下一个定义了初始 url 的中间件

如何从给定/构造时的内部跳转到下一个迭代?

跳转到for循环Cuda中的下一个块

如何在mysql中获取下一个自动增量ID

如何在Android中的ViewPager之后转到下一个活动?

如何在Android中制作下一页按钮(单击以转到下一个片段)

Vim - 在插入模式下跳转到下一个/上一个空行

如何在当前缓冲区中跳转下一个标签-Vim?

MYSQL如何插入下一个列ID

如何在引用替代表单的 Access 表单中创建“转到下一个”记录按钮

R for循环跳转到下一个迭代

vimdiff:跳转到行内的下一个差异吗?

Textarea和Tab键:获取\ t而不是跳转到下一个元素

Swift-不为空时自动跳转到下一个文本字段

ASP.Net自动跳转到下一个TextField

用于跳转到下一个文件夹的 Powershell 命令

如何在插入MYSQL之前获取下一个自动增量ID

Jquery 测验 - 如何转到下一个问题?

如何在Django管理员中转到“下一个”对象?

如何在按钮单击事件中将图像旋转到下一个程度?

使用git log后如何在Git Bash中转到下一个命令?

删除项目后如何在角度列表中查找下一个空闲ID