Двойной Select c лимитом - MySQL

Узнай цену своей работы

Формулировка задачи:

Всем привет. Задача такая, есть 2 запроса
Select * from Sweets where items='1' limit 10;
 
Select * from Sweets where items='1' limit 10;
Возможно ли их объединить так, чтобы в результате получалось бы до 20 строк в перемешку с items='1' и items='22'. Можно к примеру сделать
Select * from Sweets where items='1' or items='22'
Но в этом случаи загвоздка в том, как ограничить выборку по каждому items до 10 строк...

Решение задачи: «Двойной 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. Описание действий в коде:

  1. В подзапросе SELECT внутри скобок (), выбираются два варианта данных:
    • Присваивается значение переменной сессии @a, если она не имеет значения, то ей присваивается 0, и к ней добавляется 2 (rn).
    • Выбираются все поля (s.*) из таблицы sweets, где items равна 1.
    • Вторая строка подзапроса делает то же самое, но для items равной 22.
  2. Во внешнем запросе SELECT (список действий начинается с этого места):
    • Выбираются все поля (v.*) из таблицы sweets (которая является результатом выполнения подзапроса).
    • Результаты сортируются по полю rn.
    • Применяется ограничение LIMIT 20. Код может быть использован для получения списка элементов из таблицы sweets, где items равна 1 или 22, с уникальными номерами (rn), пронумерованными с 2 и увеличивающимися на 2 для каждого следующего элемента. Ограничение LIMIT 20 применяется для получения не более 20 элементов из списка.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.417 из 5