1
我通過EXECUTE
動態創建一個字符串來執行此操作。它會拋出一個異常 - 爲什麼?
正如您所看到的,我在嘗試執行之前返回了字符串。當我在MySQL客戶端運行這個結果而不是CALL procedure()
時,它的工作完美無瑕。 如果我嘗試返回PREPARE
d字符串,我不會得到任何結果。似乎PREPARE
有點打破我的字符串。爲什麼我不能執行我的字符串?
例外
錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的 '選擇MOVIE_NAME,@ClearLOGOs:= IF((SELECT COUNT(image_id)FROM movie_images WHE' 正確的語法手冊第1行
最重要的SQL
SET set_part = CONCAT(set_part, '; ');
SET having_part = CONCAT(having_part, ' ORDER BY completeness ASC');
SET completeness_part = CONCAT(completeness_part, ') AS completeness');
SET complete_select = CONCAT('',set_part, select_part, completeness_part, ' FROM movie_items ',having_part);
SET @exec = complete_select;
SELECT @exec;
PREPARE _exec FROM @exec;
EXECUTE _exec;
結果(未格式化,精確副本)
SET @ClearLOGOs=0, @ClearART=0, @cdART=0, @Movie_Backgrounds=0, @Movie_Banner=0, @HD_Movie_Logos=0, @Movie_Thumbs=0, @HD_ClearART=0, @Movie_Poster=0; SELECT movie_name, @ClearLOGOs:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '10' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS ClearLOGOs, @ClearART:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '11' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS ClearART, @cdART:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '12' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS cdART, @Movie_Backgrounds:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '16' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Backgrounds, @Movie_Banner:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '19' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Banner, @HD_Movie_Logos:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '23' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS HD_Movie_Logos, @Movie_Thumbs:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '24' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Thumbs, @HD_ClearART:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '26' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS HD_ClearART, @Movie_Poster:=IF((SELECT COUNT(image_id) FROM movie_images WHERE image_active = 'y' AND image_type = '29' AND image_movie_tmdb_id = movie_tmdb_id) > 0, 0, 1) AS Movie_Poster,(@ClearLOGOs + @ClearART + @cdART + @Movie_Backgrounds + @Movie_Banner + @HD_Movie_Logos + @Movie_Thumbs + @HD_ClearART + @Movie_Poster) AS completeness FROM movie_items HAVING ClearLOGOs > 0 OR ClearART > 0 OR cdART > 0 OR Movie_Backgrounds > 0 OR Movie_Banner > 0 OR HD_Movie_Logos > 0 OR Movie_Thumbs > 0 OR HD_ClearART > 0 OR Movie_Poster > 0 ORDER BY completeness ASC
保持從查詢中刪除小部件,直到它的工作原理,然後你刪除的最後一件事是問題 – Bohemian
您使用什麼語言?例如,在PHP中,查詢不能包含';'。嘗試單獨進行每個查詢。 – rendon
@rendon抱歉不夠清晰 - 我在mysql客戶端執行所有這些操作。 – Lucas