MysQL - установить DES C LIMIT из переменной - PullRequest
0 голосов
/ 30 марта 2020

Мне нужно установить DESC LIMIT с помощью переменной. Я попробовал следующее, но это дало мне синтаксическую ошибку.

Также есть способ не использовать один и тот же запрос дважды? Примечание ВЫБРАТЬ itemid ИЗ элементов, ГДЕ hostid = 1234 И key_ LIKE '% online%' используется дважды.

SELECT count(itemid) INTO @var1 FROM items WHERE hostid = 1234 AND key_ LIKE '%online%';

Затем

SELECT sum(value) from (SELECT value FROM history_uint WHERE itemid 
IN (SELECT itemid FROM items WHER hostid = 1234 AND key_ LIKE '%online%') ORDER BY clock 
DESC LIMIT @var1) src;

Ошибка: синтаксическая ошибка около '@ var1';

1 Ответ

0 голосов
/ 02 апреля 2020

Это невозможно напрямую, но, как указано в комментарии p-salmon , это возможно с помощью динамического c SQL запроса ИЛИ хранимой процедуры.

Вот хранимая процедура I используется в качестве теста.

DELIMITER //
CREATE PROCEDURE getTotalUsers()
BEGIN
-- DECLARE VARIABLE_NAME shouldn't be the same as any column_name within the stored procedure.
DECLARE LIMIT_ROWS INT;  

SELECT count(itemid) INTO @LIMIT_ROWS FROM items WHERE hostid = 1234 AND key_ LIKE '%online%';

PREPARE STMT1 FROM

"SELECT sum(value) from (SELECT value FROM history_uint WHERE itemid 
IN (SELECT itemid FROM items WHER hostid = 1234 AND key_ LIKE '%online%') ORDER BY clock 
DESC LIMIT ?") src";
-- The ? gets replaced by variable @LIMIT_ROWS
EXECUTE STMT1 USING @LIMIT_ROWS;
DEALLOCATE PREPARE STMT1;

END //

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...