Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用IF语句创建SQL存储过程_Mysql_Sql - Fatal编程技术网

Mysql 使用IF语句创建SQL存储过程

Mysql 使用IF语句创建SQL存储过程,mysql,sql,Mysql,Sql,我试图在PHPmyadmin中创建一个存储过程,但它似乎不喜欢我的IF语句。谁能帮我找出我做错了什么: SQL: CREATE PROCEDURE get_products_in_category(在inCategoryID INT中, 在inShortDescriptionLength INT、inProductsPerPage INT、inStartItem INT中) 开始 “选择p.productID,p.name,IF(LENGTH(p.description)我认为您想要执行动态SQ

我试图在PHPmyadmin中创建一个存储过程,但它似乎不喜欢我的IF语句。谁能帮我找出我做错了什么:

SQL:

CREATE PROCEDURE get_products_in_category(在inCategoryID INT中,
在inShortDescriptionLength INT、inProductsPerPage INT、inStartItem INT中)
开始

“选择p.productID,p.name,IF(LENGTH(p.description)我认为您想要执行动态SQL

分隔符$$
创建过程获取类别中的产品
(
在inCategoryID INT中,
在inShortDescriptionLength INT中,
在inProductsPerPage INT中,
在inStartItem INT中
)
开始
设置@sql=CONCAT('选择p.productID,
p、 名字,

如果(字符长度(p.description),因为我是个白痴:)
CREATE PROCEDURE get_products_in_category(IN inCategoryID INT, 
IN inShortDescriptionLength INT, IN inProductsPerPage INT, IN inStartItem INT)

BEGIN
"SELECT p.productID, p.name, IF(LENGTH(p.description) <= ?, p.description, 
 CONCAT(LEFT(p.description, ?), '...')) AS description, p.price, p.discounted_price, 
 p.thumbnail FROM tblProducts p

INNER JOIN tblProdCat pc
ON pc.productID = p.productID
WHERE tblProdCat.categoryID = ?
ORDER BY p.display DESC
LIMIT ?, ?";

SET @p1 = inShortDescriptionLength;
SET @p2 = inShortDescriptionLength;
SET @p3 = inCategoryID;
SET @p4 = inStartItem;
SET @p5 = inProductsPerPage;

END$$
DELIMITER $$
CREATE PROCEDURE get_products_in_category
(
    IN inCategoryID INT, 
    IN inShortDescriptionLength INT, 
    IN inProductsPerPage INT, 
    IN inStartItem INT
)
BEGIN

    SET @sql = CONCAT('SELECT   p.productID, 
                                p.name, 
                                IF(CHAR_LENGTH(p.description) <= ?, p.description, CONCAT(LEFT(p.description, ?), ''...'')) AS description, 
                                p.price, 
                                p.discounted_price, 
                                p.thumbnail 
                        FROM    tblProducts p
                                INNER JOIN tblProdCat pc
                                    ON pc.productID = p.productID
                        WHERE   pc.categoryID = ?
                        ORDER   BY p.display DESC
                        LIMIT   ',inStartItem, ', ',inProductsPerPage);



    PREPARE stmt1 FROM @sql;
    SET @p1 = inShortDescriptionLength;
    SET @p2 = inShortDescriptionLength;
    SET @p3 = inCategoryID;

    EXECUTE stmt1 USING @p1, @p2, @p3;
    DEALLOCATE PREPARE stmt1;
END $$
DELIMITER ;