Я бы сделал это так:
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