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

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

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

  1. course_id lesson_id content_id seq_no
  2. 1 1 1 1
  3. 1 1 2 2
  4. 1 5 3 1
  5. 1 5 4 2
  6. 1 8 12 1
  7. leson_id lesson_no course_id
  8. 1 1 1
  9. 5 3 1
  10. 8 2 1

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

  1. SELECT *
  2. FROM course_content
  3. WHERE course_id =1
  4. AND content_id = (
  5. SELECT MIN( content_id )
  6. FROM course_content
  7. WHERE lesson_id =1
  8. AND content_id >21
  9. ORDER BY seq_no ASC )

上一次单击

  1. SELECT *
  2. FROM course_content
  3. WHERE course_id =1
  4. AND content_id = (
  5. SELECT MAX( content_id )
  6. FROM course_content
  7. WHERE lesson_id =1
  8. AND content_id <2
  9. ORDER BY seq_no DESC )
gopyfrb3

gopyfrb31#

我会这样做:

  1. SELECT c.course_id
  2. , c.lesson_id
  3. , c.content_id
  4. , c.seq_no
  5. , l.lesson_no
  6. FROM course_content c
  7. JOIN lesson l
  8. ON l.lesson_id = c.lesson_id
  9. WHERE c.course_id = 1
  10. AND l.lesson_no >= :curr_lesson_no
  11. AND ( c.seq_no > :curr_seq_no
  12. OR
  13. l.lesson_no > :curr_lesson_no2
  14. )
  15. ORDER
  16. BY l.lesson_no
  17. , c.seq_no
  18. LIMIT 1

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

  1. SELECT cl.lesson_no AS curr_lesson_no
  2. , cc.seq_no AS curr_seq_no
  3. FROM course_content cc
  4. JOIN lesson cl
  5. ON cl.lesson_id = cc.lesson_id
  6. WHERE cc.content_id = :curr_content_id
  7. ORDER
  8. BY cl.lesson_no
  9. , cc.seq_no
  10. LIMIT 1

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

  1. SELECT c.course_id
  2. , c.lesson_id
  3. , c.content_id
  4. , c.seq_no
  5. , l.lesson_no
  6. FROM ( SELECT cl.lesson_no AS curr_lesson_no
  7. , cc.seq_no AS curr_seq_no
  8. FROM course_content cc
  9. JOIN lesson cl
  10. ON cl.lesson_id = cc.lesson_id
  11. WHERE cc.content_id = :curr_content_id
  12. ORDER
  13. BY cl.lesson_no
  14. , cc.seq_no
  15. LIMIT 1
  16. ) q
  17. JOIN lesson l
  18. ON l.lesson_no >= q.curr_lesson_no
  19. JOIN course_content c
  20. ON c.lesson_id = l.lesson_id
  21. WHERE c.course_id = 1
  22. AND ( c.seq_no > q.curr_seq_no
  23. OR
  24. l.lesson_no > q.curr_lesson_no
  25. )
  26. ORDER
  27. BY l.lesson_no
  28. , c.seq_no
  29. LIMIT 1
展开查看全部

相关问题