SELECT-запрос с начальным id?

Есть таблица с полями: id INT, name VARCHAR(255), date DATE.
Как можно сформировать SELECT запрос с сортировкой по полю date так, чтобы записи начинались с фиксированного значения id?
Поясню.
вся таблица сортируется по дате, при этом id могут идти как угодно, к примеру так: 10, 20, 3, 40, 15, 1, 17. Мне нужно запросом получать пачки строк с к-вом (LIMIT 10 к примеру), но чтобы каждая пачка начиналась с определенного id. Например нужно с id=40, тогда будет последовательность: 40, 15, 1, 17 и т.д.
  • Вопрос задан
  • 2332 просмотра
Решения вопроса 2
@AlexeyIvanov
Developer
Если в таблице все date уникальные, то подойдёт такой запрос
select * from tbl
where `date` >= (select `date` from tbl where id = 40)
order by `date`;
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для первого запроса:
SELECT `id`, `date`, `name` 
    FROM `table`
    ORDER by `date`, `id`
    LIMIT 10

`id` последней строки сохраняем в last_id. Для следующего запроса:
SELECT `id`, `name`, `date`
    FROM `table` 
    WHERE (@Date := (SELECT `date` FROM `table` WHERE `id` = :last_id))
        AND (`date` > @Date OR (`date` = @Date AND `id` > :last_id))
    ORDER BY `date`, `id`
    LIMIT 10
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
gbg
@gbg
Любые ответы на любые вопросы
where будет прекрасно работать в таких условиях:
select id,name,"DATE" from your_table order by "DATE",id,name where id>=N
Ответ написан
AloneCoder
@AloneCoder
[object Object]
Можно попробовать сделать с подзапросом, который будет выбирать по дате, а основной запрос отфильтрует id
Но что-то мне подсказывает, что у вас изначально что-то не то с архитектурой
Ответ написан
Serhioromano
@Serhioromano
Web Developer
Зпррос

SELECT * FROM my_table WHERE id >= 100 ORDER BY id

и

SELECT * FROM my_table WHERE id >= 100 ORDER BY `date`


Абсолютно идентичны по набору записей которые будут возвращены. Только сортировка записей будет изменина. Но записи и там и там теже.

Нужно понимать что ORDER BY не зависит от WHERE. Вы можете просто сделать

SELECT * FROM my_table WHERE id >= 100

И опять же получить теже записи просто не сортированые.
Ответ написан
@faustxp
Тогда так.
select * from tbl b
where b.date>= (select a.date from (select date from tbl
where id = 40
order by date) a
limit 1)
order by b.date;


Но только если связка ID и DATE уникальна.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы