Двойной Select c лимитом - MySQL
Формулировка задачи:
Всем привет. Задача такая, есть 2 запроса
Возможно ли их объединить так, чтобы в результате получалось бы до 20 строк в перемешку с items='1' и items='22'.
Можно к примеру сделать
Но в этом случаи загвоздка в том, как ограничить выборку по каждому items до 10 строк...
Select * from Sweets where items='1' limit 10; Select * from Sweets where items='1' limit 10;
Select * from Sweets where items='1' or items='22'
Решение задачи: «Двойной Select c лимитом»
textual
Листинг программы
SELECT v.* FROM ( SELECT @a:=IFNULL(@a,0)+2 rn, s.* FROM sweets s WHERE items=1 UNION ALL SELECT @b:=IFNULL(@b,1)+2 rn, s.* FROM sweets s WHERE items=22 ) v ORDER BY v.rn LIMIT 20
Объяснение кода листинга программы
В данном коде используется двойной подзапрос с использованием переменных сессии MySQL @a и @b. Описание действий в коде:
- В подзапросе SELECT внутри скобок (), выбираются два варианта данных:
- Присваивается значение переменной сессии @a, если она не имеет значения, то ей присваивается 0, и к ней добавляется 2 (rn).
- Выбираются все поля (s.*) из таблицы sweets, где items равна 1.
- Вторая строка подзапроса делает то же самое, но для items равной 22.
- Во внешнем запросе SELECT (список действий начинается с этого места):
- Выбираются все поля (v.*) из таблицы sweets (которая является результатом выполнения подзапроса).
- Результаты сортируются по полю rn.
- Применяется ограничение LIMIT 20. Код может быть использован для получения списка элементов из таблицы sweets, где items равна 1 или 22, с уникальными номерами (rn), пронумерованными с 2 и увеличивающимися на 2 для каждого следующего элемента. Ограничение LIMIT 20 применяется для получения не более 20 элементов из списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д