[英]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.