將以逗號分隔的ID作爲varchar發送到MySQL存儲過程時,我無法將該字符串用作IN子句的一部分,並帶有正確的結果返回。該字符串被截斷爲小數點,並且只使用第一個值。在存儲過程中爲'in'子句使用MySQL用戶定義的變量
我想我可以通過準備然後執行語句來解決這個問題,但是這仍然只返回匹配的第一個值。
代碼示例可能會使事情更清晰一些。我想下面的轉換成一個存儲過程(與條款動態):
select id, name from cities where id in (1,2,3);
這是用事先準備好的聲明我的存儲過程:
DROP PROCEDURE IF EXISTS `cities_select_by_ids` $$
CREATE PROCEDURE `cities_select_by_ids`(
in _cityIds varchar(1000)
)
BEGIN
SET @cityIds = _cityIds;
PREPARE stmt FROM '
select
id,
name
from cities
where id in (?);
';
EXECUTE stmt USING @cityIds;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
調用存儲過程我只得到一個比賽爲城市「1」:
call cities_select_by_ids_prepare('1, 2, 3');
這裏是一個創建和插入腳本的表和數據:
CREATE TABLE cities (
id int(10) unsigned NOT NULL auto_increment,
name varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
insert into cities (name) values ('London'), ('Manchester'), ('Bristol'), ('Birmingham'), ('Brighton');
謝謝,這是我擔心的 - 至少現在我知道了。 – Nick 2009-10-21 17:20:42