MySQL存储过程|怎么写呢?

时间:2010-12-23 19:07:45

标签: mysql stored-procedures

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

group

执行此操作时出现语法错误,即使编辑器没有突出显示任何错误并让我保存程序,我认为其中一个可能正在发生:

  • 我错误地使用了`ASC`或`DESC`,因为它是一个SQL保留字。
  • 我在某处读到Prepared语句只针对一个SQL查询,因为我有嵌套查询,所以无法完成。

我测试了这个标准查询:


    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

它给了我想要的结果。那我该怎么设计这个程序呢? 真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

这可能不一定能解决您的问题,但是,您可以稍微清理一下该查询,消除子查询并获得应该执行得更好的内容。

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;