Добрый день.
Есть таблица workers с полями: id, name, age, salary
Задача: Из таблицы workers достаньте работников со второго по шестого и отсортируйте их по возрастанию возраста.
Очевидное решение задачи:
SELECT * FROM workers WHERE id >0 ORDER BY age LIMIT 2,6
Но в данном запросе мы сначала сортируем, потом выбираем. Пробовал поставить местами ORDER и LIMIT, получает ошибка.
А как по другому поставить запрос чтобы сначала выбрать записи, а потом их отсортировать?
Спасибо Вам за решение с подзапросом, становится понятнее.
Одного не пойму. Всегда считал (практика показывает), что при применении LIMIT 2,6 - SQL начинает отбор со второй строки включительно, но вот сейчас почему-то SQL выбрал с третей строки - 5 значений!?!?!? Почему так?
0ldn0mad, может потому, что id 0 - первая строка? Если это ломает логику приложения, то нужно удалить where
Должно быть согласно заявленной логике id: 2,3,4,5,6
Что значит "достаньте работников со второго по шестого "? В нормальной работе такое не делают через LIMIT, потому как он нам даст невесть кого, а нам скорее всего нужны конкретные работники, предположу что со 2го по 6го по id, тогда:
SELECT
*
FROM workers
WHERE id>=2 AND id<=6
ORDER BY age
Если в условии стоит сначала выбрать, потом отсортировать, я понимаю так - сначала выбираем относительно id со 2 по 6, потом сортируем по полю age.
Здесь будет ответ №1. Но если мы сначала отсортируем по полю age, а потом выберем строки относительно id, то ответ будет №2.
По условию задачи нам нужен ответ №1. SQL строит запрос притягивая ответ к №2.
Спасибо за подсказку. С формированием подзапроса помогите, плиз. Что не так в моем написании?
SELECT *
FROM workers
WHERE id >0 ORDER BY age
(SELECT *
FROM workers
WHERE id >0 LIMIT 2,6)