На этот раз у меня есть вопрос MySQL, я пытаюсь создать хранимую процедуру, которая будет выполнять подготовленный оператор, цель - получить ранжированный список из таблицы ("order_info
"), список разделенпо «страницам» каждая страница определяется количеством записей и должна быть упорядочена с использованием определенного поля, отсортированного либо 'ASC'
, либо 'DESC'
, каждая запись представляет собой «order
». Подвох в том, что процедура возвращает заказы.определенной группы, порядок связан с user
, который принадлежит group
.Вот что я сделал до сих пор:
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;
И он дает мне результаты, которые я хочу.Так как бы я разработал процедуру?Любая помощь действительно ценится.