Использование переменной в предложении LIMIT в MySQL

Я пишу хранимую процедуру, где у меня есть входной параметр my_size, который является INTEGER . Я хочу иметь возможность использовать его в предложении LIMIT в SELECT . По-видимому, это не поддерживается, есть ли способ обойти это?

 # I want something like: SELECT * FROM some_table LIMIT my_size; # Instead of hardcoding a permanent limit: SELECT * FROM some_table LIMIT 100; 

    В этой статье появился поиск. Я вставил соответствующий текст ниже.

    Вот сообщение на форуме, в котором показан пример подготовленных операторов, позволяющий присвоить значение переменной заданию limit:

    http://forums.mysql.com/read.php?98,126379,133966#msg-133966

    Тем не менее, я думаю, что эта ошибка должна получить некоторое внимание, потому что я не могу себе представить, что подготовленные операторы в рамках процедуры позволят оптимизировать время процедуры. Я чувствую, что подготовленные операторы компилируются и выполняются во время выполнения процедуры, что probaby оказывает негативное влияние на эффективность. Если предложение limit может принимать обычные переменные процедуры (например, аргумент процедуры), тогда firebase database все еще может выполнять оптимизацию во время компиляции в остальной части запроса в рамках процедуры. Вероятно, это приведет к более быстрому выполнению процедуры. Я не эксперт.

    Для тех, кто не может использовать MySQL 5.5.6+ и не хочет писать хранимую процедуру, есть другой вариант. Мы можем добавить предложение where в подзаголовок с ROWNUM.

     SET @limit = 10; SELECT * FROM ( SELECT instances.*, @rownum := @rownum + 1 AS rank FROM instances, (SELECT @rownum := 0) r ) d WHERE rank < @limit; 

    ХРАНИМАЯ ПРОЦЕДУРА

     DELIMITER $ create PROCEDURE get_users(page_from INT, page_size INT) begin SET @_page_from = page_from; SET @_page_size = page_size; PREPARE stmt FROM "select u.user_id, u.firstname, u.lastname from users u limit ?, ?;"; EXECUTE stmt USING @_page_from, @_page_size; DEALLOCATE PREPARE stmt; end$ DELIMITER ; 

    ПРИМЕНЕНИЕ

     call get_users(1, 10); 

    Я знаю, что этот ответ пришел поздно, но попробуйте SQL_SELECT_LIMIT.

    Пример:

     Declare rowCount int; Set rowCount = 100; Set SQL_SELECT_LIMIT = rowCount; Select blah blah Set SQL_SELECT_LIMIT = Default; 

    Эта функция была добавлена ​​в MySQL 5.5.6. Проверьте эту ссылку .

    Я обновил до MySQL 5.5 только для этой функции и отлично работает. 5.5 также имеет много улучшений производительности, и я полностью рекомендую его.

    Другой способ, так же, как написал «Прадип Санджая», но с использованием CONCAT:

     CREATE PROCEDURE `some_func`(startIndex INT, countNum INT) READS SQL DATA COMMENT 'example' BEGIN SET @asd = CONCAT('SELECT `id` FROM `table` LIMIT ',startIndex,',',countNum); PREPARE zxc FROM @asd; EXECUTE zxc; END; 

    Начиная с версии MySQL 5.5.6, вы можете указать LIMIT и OFFSET с переменными / параметрами.

    Для справки см. Руководство 5.5, руководство 5.6 Manual и @ Quassnoi

    Давайте будем гением компьютера.