【问题标题】:Check mySQL is Correct检查 mySQL 是否正确
【发布时间】:2011-01-02 17:01:35
【问题描述】:

PHPmyAdmin 一直拒绝这个 mySQL,我很确定它是正确的,实际上并不需要它运行,它的 uni 工作并且只需要提交,它看起来对我来说是正确的。

我得到的实际错误是

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 23 

我尝试过添加和删除;要 LIMIT 和 END 哪一个帮助,我是不是很愚蠢?

CREATE PROCEDURE topFive(
   IN PID VARCHAR(6),
   IN CID VARCHAR(6)
)
BEGIN

SELECT `OrderItem`.`ProductID` , COUNT(*) AS `Popularity`
FROM `OrderItem`,
(
SELECT `Order`.`OrderID`
FROM `OrderItem`,`Order`
WHERE
(`Order`.`OrderID`=`OrderItem`.`OrderID`)
AND 
(`OrderItem`.`ProductID`=PID)
AND
(`Order`.`CustomerID`!=CID)
) AS `ORDER_ID_TABLE`
WHERE  (`OrderItem`.`OrderID` = `ORDER_ID_TABLE`.`OrderID`)
GROUP BY `OrderItem`.`ProductID`
ORDER BY `Popularity`
LIMIT 0,5

END

谢谢^_^

【问题讨论】:

    标签: mysql stored-procedures phpmyadmin


    【解决方案1】:

    您必须更改分隔符。至少在 MySQL 客户端你这样做:

    DELIMITER //
    
    CREATE PROCEDURE topFive(
       IN PID VARCHAR(6),
       IN CID VARCHAR(6)
    )
    BEGIN
    
    SELECT `OrderItem`.`ProductID` , COUNT(*) AS `Popularity`
    FROM `OrderItem`,
    (
    SELECT `Order`.`OrderID`
    FROM `OrderItem`,`Order`
    WHERE
    (`Order`.`OrderID`=`OrderItem`.`OrderID`)
    AND 
    (`OrderItem`.`ProductID`=PID)
    AND
    (`Order`.`CustomerID`!=CID)
    ) AS `ORDER_ID_TABLE`
    WHERE  (`OrderItem`.`OrderID` = `ORDER_ID_TABLE`.`OrderID`)
    GROUP BY `OrderItem`.`ProductID`
    ORDER BY `Popularity`
    LIMIT 0,5//
    
    END
    

    【讨论】:

    • 最后的 // 应该在 END 之后而不是在 LIMIT 0,5 之后。在极限 0,5 你应该放一个 ;