[英]mysql - #1064 syntax error when creating a procedure using case for rand()
我收到#1064錯誤。 我想在一起使用rand()case或if else語句。 我嘗試了所有解決方案,但沒有取得任何結果 這是我的SQL查詢:
DELIMITER ;;
CREATE PROCEDURE `pgetVideos`(pName varchar(100), positionID int)
BEGIN
SELECT
ID,
userID,
createddate_,
duedate_,
title,
description,
videourl,
categoryID,
positionID,
imagePath
FROM
videos
WHERE
videos.isDeleted<>1 AND
(positionID=0 OR videos.positionID = positionID)
ORDER BY
CASE pName
WHEN 'video1' THEN RAND() LIMIT 10
WHEN 'video2' THEN RAND() LIMIT 4
WHEN 'video3' THEN RAND() LIMIT 6
WHEN 'video4' THEN RAND()
END CASE;
END ;;
DELIMITER ;
我也試過這段代碼:
DELIMITER ;;
CREATE PROCEDURE `pgetVideos`(pName varchar(100), positionID int)
BEGIN
SELECT
ID,
userID,
createddate_,
duedate_,
title,
description,
videourl,
categoryID,
positionID,
imagePath
FROM
videos
WHERE
videos.isDeleted<>1 AND
(positionID=0 OR videos.positionID = positionID)
ORDER BY
IF pName = "video1" THEN
RAND() LIMIT 10
ELSE IF pName = "video2" THEN
RAND() LIMIT 4
ELSE IF pName = "video3" THEN
RAND() LIMIT 6
ELSE IF pName = "video4" THEN
RAND()
END IF;
END ;;
DELIMITER ;
我該如何修復錯誤?
CASE
表達式只返回一個值, LIMIT
不是值的一部分。 您沒有替換查詢文本,而是返回在排序結果時應該使用的值。
在LIMIT
子句中不可能使用計算表達式。 但是,由於您在存儲過程中執行此操作,因此可以使用PREPARE
生成動態SQL。
DELIMITER ;;
CREATE PROCEDURE `pgetVideos`(pName varchar(100), positionID int)
BEGIN
SET @limit = CASE pname
WHEN 'video1' THEN 'LIMIT 10'
WHEN 'video2' THEN 'LIMIT 4'
WHEN 'video3' THEN 'LIMIT 6'
WHEN 'video4' THEN ''
END;
SET @sql = CONCAT('
SELECT
ID,
userID,
createddate_,
duedate_,
title,
description,
videourl,
categoryID,
positionID,
imagePath
FROM
videos
WHERE
videos.isDeleted<>1 AND
(positionID=0 OR videos.positionID = positionID)
ORDER BY RAND() ', @LIMIT);
PREPARE stmt FROM @sql;
EXECUTE stmt;
END ;;
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.