По крайней мере, я так думаю.Я не уверен, как вызвать процедуру с правильными параметрами.
Вот процедура SQL:
CREATE PROCEDURE catalog_get_products_on_department(
IN inDepartmentId INT, IN inShortProductDescriptionLength INT,
IN inProductsPerPage INT, IN inStartItem INT)
BEGIN
PREPARE statement FROM
"SELECT DISTINCT p.product_id, p.name,
IF(LENGTH(p.description) <= ?,
p.description,
CONCAT(LEFT(p.description, ?),
'...')) AS description,
p.price, p.discounted_price, p.thumbnail
FROM product p
INNER JOIN product_category pc
ON p.product_id = pc.product_id
INNER JOIN category c
ON pc.category_id = c.category_id
WHERE (p.display = 2 OR p.display = 3)
AND c.department_id = ?
ORDER BY p.display DESC
LIMIT ?, ?";
SET @p1 = inShortProductDescriptionLength;
SET @p2 = inShortProductDescriptionLength;
SET @p3 = inDepartmentId;
SET @p4 = inStartItem;
SET @p5 = inProductsPerPage;
EXECUTE statement USING @p1, @p2, @p3, @p4, @p5;
END$$
А вот фрагмент схемы:

Вот что происходит, когда я пытаюсь вызвать процедуру со следующими параметрами:
inDepartmentId: 1,
inShortProductDescriptionLength: 10,
inProductsPerPage: 10,
nStartItem: 1
The following query has failed: "SET @p0='1'; SET @p1='10'; SET @p2='10'; SET @p3='1'; CALL `catalog_get_products_on_department`(@p0, @p1, @p2, @p3); "
MySQL said: #3065 - Expression #1 of ORDER BY clause is not in SELECT list, references column 'turing.p.display' which is not in SELECT list; this is incompatible with DISTINCT