Как перейти к следующему идентификатору в MySQL - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть таблица course_content и таблица уроков, как показано ниже

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

Я хочу иметь следующую предыдущую кнопку в моем приложении. если щелкнуть по следующему, если у текущего урока есть следующий контент, запрос должен дать следующий идентификатор контента, и если у него нет следующего контента, он должен перейти к следующему уроку и первому контенту. порядковый номер для контента - 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 )

1 Ответ

0 голосов
/ 01 сентября 2018

Я бы сделал это так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...