MySQL variabels

Всем привет.Недавно столкнулся, как по мне с очень интересной задачей. И реально пришлось задействовать @variable from MySQL. Хочу и Вам привести реальный пример, где они необходимы и могут Вам помочь. Я думаю, эта статья будет полезна.
Давайте изначально поставим задачу. У нас есть таблица users и нам стоит делать выборку из нее по определенным критериям:- сортируем по lastName, firstName by ASC- и нужно взять 3 записи после определённой (эту запись мы определяем по ID), но все происходить с     учетом того что записи отсортированыДавайте уточним что ID для определённой записи мы берем по определенному критерию (в это мы не будем углубляться). Будем считать что мы уже на входе имеем ID записи с которой нужно взять следующих 3 записи по нашем критериям. Таблица users:
id int(11) NOT NULL   firstName varchar(255) NULL   lastName varchar(255) NULL   city varchar(255) NULL   address varchar(255) NULL

Заполняем ее следующими данными:

После сортировки мы имемь:

Нам нужно взять следующих 3 записи после id=5 но нужно учесть что всегда запись для старта будет определяться динамически. Тоесть не сможем воспользоваться одним LIMIT

Тоесть результат должен быть

И вот для решения это нужен такой запрос:

И самое главное что прелесть вся в том что @ – Вы создаете переменную session scope и можете на одной же итереации ее изменить и учесть ее значение как через сылку в данной итерации так в следующих шагах.

Давайте разберем как оно работает.

SELECT @check := 0 произведена инициализация со значением 0.

тоесть на проходах до id=5 chk всегда 0 а когда id=5 тогда @check стает 1 и каждый следующий проход мы берем id!=5 и тогда берем значение @check а оно после 5 стало 1. 

Вот и результат внутреннего запроса

Главную строку я подчеркнул.

Смотрите сейчас запись с id=5 виделена таким образом что chk со значением 1 начинается после записи котору мы указали как точну отсчета.

Вот и все. Я очень надеюсь что Вам это пригодиться. И в заключение читайте doc, это реально нужно для работы)))))))))))))))

Please follow and like us:

Leave a Comment