繁体   English   中英

MySQL存储过程| 怎么写呢?

[英]MySQL Stored Procedure | How to write it?

这次我遇到一个MySQL问题,我正在尝试创建一个存储过程,该存储过程将执行一条准备好的语句,目标是从一个表(“ order_info ”)中获取一个有范围的列表,该列表除以“页面”,每页由记录计数确定,应使用排序为'ASC''DESC'的特定字段进行排序,每条记录表示一个“ order ”,这里的问题是该过程返回特定组的订单,订单与属于groupuser关联。 到目前为止,这是我所做的:


    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保留字。
  • 我在某处读到,Prepared语句仅适用于一个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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM