在MySQL LIMIT 子句中使用變數
在MySQL 中,嘗試在SELECT 語句中的LIMIT 子句中使用變數時會出現一個常見的挑戰。雖然這類功能看似簡單,但本機並不支援它。
問題:
嘗試合併輸入參數時,例如 my_size(類型:INTEGER),進入 LIMIT子句時,出現以下錯誤遇到:
SELECT * FROM some_table LIMIT my_size;
Error: You cannot use variables in LIMIT clauses.
解決方法:
不幸的是,在5.5.6 之前的MySQL 版本中沒有直接的方法來克服此限制。但是,存在一種涉及利用臨時表和預存程序的解決方法。
解決方案:
要在MySQL 5.5.6 及更高版本中的LIMIT 子句中使用變量,請使用以下步驟:
對於範例:
SET @my_size = 10; CREATE TEMPORARY TABLE tmp_table AS SELECT * FROM some_table; INSERT INTO tmp_table (SELECT * FROM some_table); SELECT * FROM tmp_table LIMIT @my_size; DROP TEMPORARY TABLE tmp_table;
替代方法:
在5.5.6 之前的MySQL 版本中,可以使用替代方法,其中涉及使用帶有ROWNUM 的子查詢:
SET @limit = 10; SELECT * FROM ( SELECT instances.*, @rownum := @rownum + 1 AS rank FROM instances, (SELECT @rownum := 0) r ) d WHERE rank < @limit;
注意:此方法可能會導致表現下降與上述解決方法相比的處罰。
以上是如何在 MySQL LIMIT 子句中使用變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!