mysql select не работает если задать параметры через user_variables

94
02 декабря 2020, 23:30

Буду краток:

РАБОТАЕТ

SELECT p.id,
    p.name,
    cat.name `category`,
    prod.name `producer`,
    p.images,
    p.price,
    p.flag_avaliable,
    p.amount,
    p.description,
    p.options
FROM product p
    INNER JOIN product_category cat ON cat.id = p.category_id
    INNER JOIN product_producer prod ON prod.id = p.producer_id
ORDER BY @asc_or_desc
    limit 5 offset 6;

НЕ РАБОТАЕТ

set @asc_or_desc = 'id desc ';
set @limit_number = 5;
set @offset_number = 6;
SELECT p.id,
   p.name,
   cat.name  `category`,
   prod.name `producer`,
   p.images,
   p.price,
   p.flag_avaliable,
   p.amount,
   p.description,
   p.options
FROM product p
         INNER JOIN product_category cat ON cat.id = p.category_id
         INNER JOIN product_producer prod ON prod.id = p.producer_id
ORDER BY @asc_or_desc
limit @limit_number offset @offset_number;

Я хочу, чтобы версия, которая "не работала" стала работать. Как мне это сделать?

Я получаю эту ошибку: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@limit_number offset @offset_number; END''.

JetBrains DataGrip, MySQL 8.0.15.

**Обновление: ** Mysql не реагирует на @asc_or_desc. По крайней мере, сортируется как asc.

Answer 1

prepared statements решили проблему. Код:

set @statement =
concat('SELECT p.id,
   p.name,
   cat.name  `category`,
   prod.name `producer`,
   p.images,
   p.price,
   p.flag_avaliable,
   p.amount,
   p.description,
   p.options
FROM product p
         INNER JOIN product_category cat ON cat.id = ?
         INNER JOIN product_producer prod ON prod.id = p.producer_id
ORDER BY id ',@asc_or_desc,'
limit ? offset ?');
prepare prepared from @statement;
EXECUTE prepared USING @category_id, @limit_number, @offset_number;
DEALLOCATE PREPARE prepared;
READ ALSO
Не удается подключиться к базе данных через intellij idea

Не удается подключиться к базе данных через intellij idea

Пытаюсь подключиться к базе данных через intellij idea, при нажатии на test connection получаю ошибку Connection to MySQL - mydb@localhost failed[08001] Could not create connection to database...

132
SELECT * FROM (SELECT …ORDER BY .. LIMIT)

SELECT * FROM (SELECT …ORDER BY .. LIMIT)

Есть MySQL запрос, выглядит так:

92
Вопрос по php циклу

Вопрос по php циклу

Генерирую портфолио на сайте, блоки которые генерируются должны по очереди иметь класс is-left is-right, те

108
PHP Выборка из двух таблиц

PHP Выборка из двух таблиц

Столкнулся с таким вопросом: есть 2 таблицы - accounts и payment_transactionsВ таблице accounts находятся пользователи (id, баланс и тд

152