[英]MySQL Stored Procedure | How to write it?
這次我遇到一個MySQL問題,我正在嘗試創建一個存儲過程,該存儲過程將執行一條准備好的語句,目標是從一個表(“ order_info
”)中獲取一個有范圍的列表,該列表除以“頁面”,每頁由記錄計數確定,應使用排序為'ASC'
或'DESC'
的特定字段進行排序,每條記錄表示一個“ order
”,這里的問題是該過程返回特定組的訂單,訂單與屬於group
的user
關聯。 到目前為止,這是我所做的:
CREATE DEFINER=`root`@`%` PROCEDURE `getGroupOrders`(IN grp INT,
IN page INT,
IN count INT,
IN ord TINYINT,
IN srt VARCHAR(4)
)
BEGIN
PREPARE prepGroupOrders FROM
"SELECT oi.* FROM `dbre`.`order_info` oi
INNER JOIN `dbre`.`users` usr
ON oi.`username` = usr.`username` AND usr.`id_group` = ?
ORDER BY ? ? LIMIT ?, ?";
SET @g := grp;
SET @cnt := count;
SET @start := @page*count ;
SET @orderBy := ord;
SET @sortBy := srt;
EXECUTE prepGroupOrders USING @g,@orderBy,@sortBy,@start,@cnt;
END
執行此操作時,我遇到語法錯誤,即使編輯器未顯示任何錯誤並讓我保存了該過程,我也認為可能正在發生以下一種情況:
我已經測試了這個標准查詢:
SELECT oi.* FROM `dbre`.`order_info` oi
INNER JOIN `dbre`.`users` usr
ON oi.`username` = usr.`username` AND usr.`id_group` = 1
ORDER BY `status` DESC LIMIT 5, 10;
它給了我想要的結果。 那么我將如何設計程序? 任何幫助,我們都感激不盡。
這可能不一定能解決您的問題,但是,您可以稍微清理一下該查詢,消除子查詢,然后得到一些性能更好的東西。
SELECT oi.*
FROM `dbre`.`order_info` oi
INNER JOIN `dbre`.`users` u
ON oi.username = u.username
AND u.id_group = 1
ORDER BY `status` DESC
LIMIT 5, 10;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.