root09
@root09

Как найти следующую строчку в mysql?

Таблица
comments
id, article_id

1, 50
2, 50
3, 50

нужно сделать запрос, который бы возвращал следующий id комментария у статьи, т.е
на 1 комментарии запрос
SELECT id FROM comments WHERE article_id = 50 AND id > 1 LIMIT 1;
получаем комментарий с id 2,
SELECT id FROM comments WHERE article_id = 50 AND id > 2 LIMIT 1;
получаем комментарий с id 3,
SELECT id FROM comments WHERE article_id = 50 AND id > 3 LIMIT 1;
ничего не получаем, а нужно начать всё сначала и получать первый, т.е 1

как-то можно это сделать средствами mysql в один запрос? что-то вроде WHERE article_id = 50 AND id > 3 ЕСЛИ_ПРИШЛА_ПУСТОТА ТО другой where?
потому что сейчас я проверяю если пришла пустота то делаю новый запрос
SELECT id FROM comments WHERE article_id = 50 AND id > 0 LIMIT 1;
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 3
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Смотрите оператор CASE.
Ответ написан
Комментировать
iMedved2009
@iMedved2009
Не люблю людей
https://sqlize.online/sql/mysql80/dc8420e608dd6c09...
SELECT 
if(id = max, min, id) as next
FROM 
t,
(select max(id) as max, min(id) as min from t where article_id = 50) as m
WHERE article_id = 50 
AND id > 2 LIMIT 1;


Вот только не надо наверное так делать.
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
WITH
cte AS (
  SELECT *, COALESCE(LEAD(id) OVER (ORDER BY id),
                     MIN(id) OVER ()) next_row_id
  FROM comments
)
SELECT * 
FROM cte
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы