Как задать пользовательскую переменную в запросе?

Пользовательские переменные можно задавать через 'set', а можно ли прям внутри, к примеру select, задать переменную, что называется, на лету?

Видел простейший пример SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3, но я не хочу их выбирать, я хочу их использовать в запросе, выполнять с ними операции.

Для примера хочу брать каждый пятый товар из базы, как мне задать @a внутри этого запроса?

select * from products where (@a:=@a+1) % 5 = '0'

Я понимаю, что это можно сделать по id товара или каким-то другим способом, интересует не решение запроса, а ответ на мой вопрос.
  • Вопрос задан
  • 15964 просмотра
Пригласить эксперта
Ответы на вопрос 2
@AlexeyVD
Переменную можно объявить в подзапросе. Например:
SELECT f1, @i := @i + 1
FROM table1
JOIN (SELECT @i := 0) t


Что бы использовать ее применимо к вашей задаче, нужно в подзапросе пронумеровать строки, а потом уже по условию выбрать нужные. Что-то вроде этого:

SELECT f1, f2
FROM
  (
     SELECT f1, f2, @i := @i + 1 AS num
     FROM table1
     JOIN (SELECT @i := 0) t
     ORDER BY f3
  ) sel
WHERE sel.num % 5 = 0
Ответ написан
@1x1
SELECT * FROM table WHERE (@a:=IF(@a,@a,0))>-1 AND (@a:=@a+1) % 5 = 0
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы