簡體   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