gpt4 book ai didi

MySQL 存储过程 |怎么写呢?

转载 作者:行者123 更新时间:2023-11-30 23:39:39 25 4
gpt4 key购买 nike

这次我有一个 MySQL 问题,我正在尝试创建一个将执行准备好的语句的存储过程,目标是从表中获取一个范围列表("order_info") ,列表按“页面”划分,每个页面由记录计数确定,应使用按 'ASC''DESC' 排序的特定字段排序,每条记录代表一个“order”,这里的问题是该过程返回特定组的订单,该订单与属于 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

执行此操作时出现语法错误,即使编辑器没有突出显示任何错误并让我保存程序,我认为可能会发生以下情况之一:

  • 我错误地使用了 `ASC` 或 `DESC`,因为它是 SQL 保留字。
  • 我在某处读到准备好的语句仅用于一个 SQL 查询,并且由于我有嵌套查询,因此无法完成。

我已经测试了这个标准查询:


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;

关于MySQL 存储过程 |怎么写呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com