Python 在Mysql过程中通过字符串循环
我编写了一个存储过程,它以逗号分隔的字符串作为参数。例如:id_list='23,45,8106,9,33'。在这个过程中,我想循环遍历字符串,一次从字符串中提取一个ID,然后从数据库中提取数据。基本上,ID将用于过程中的where条件 所以理想情况下我应该得到这样的身份证 二十三 45 8. 106 9 三十三 我尝试过这样做,但它只是提取第一个id,然后停止Python 在Mysql过程中通过字符串循环,python,mysql,stored-procedures,Python,Mysql,Stored Procedures,我编写了一个存储过程,它以逗号分隔的字符串作为参数。例如:id_list='23,45,8106,9,33'。在这个过程中,我想循环遍历字符串,一次从字符串中提取一个ID,然后从数据库中提取数据。基本上,ID将用于过程中的where条件 所以理想情况下我应该得到这样的身份证 二十三 45 8. 106 9 三十三 我尝试过这样做,但它只是提取第一个id,然后停止 DELIMITER ;; CREATE PROCEDURE `procedure_test`(IN id_list VARCHAR(2
DELIMITER ;;
CREATE PROCEDURE `procedure_test`(IN id_list VARCHAR(255))
BEGIN
DECLARE id_length INT DEFAULT 0;
DECLARE id_sub_str INT DEFAULT 0;
IF id_list IS NULL THEN
SET id_list = '';
END IF;
do_this:
LOOP
SET id_length = LENGTH(id_list);
SELECT mechanics_name, mechanics_id from `mechanics` WHERE employer_id = SUBSTRING_INDEX(id_list, ',', 1);
SET id_sub_str = CHAR_LENGTH(SUBSTRING_INDEX(id_list, ',', 1)) + 2;
SET id_list = MID(id_list, id_sub_str, id_length);
IF id_list = '' THEN
LEAVE do_this;
END IF;
END LOOP do_this;
END;;
DELIMITER ;
谁能告诉我怎么做。谢谢在我的机器上测试
DELIMITER $$
CREATE PROCEDURE procedurename(IN Param1 VARCHAR(255))
BEGIN
SET @text := TRIM(BOTH ',' FROM Param1);
SET @strLen := 0;
SET @i := 1;
WHILE @strLen < LENGTH(@text) DO
SET @str := SUBSTRING_INDEX(@text, ',', @i);
SET @strLen := LENGTH(@str);
SET @i := @i + 1;
INSERT INTO t VALUES( SUBSTRING_INDEX(@str, ',', -1)); -- Print split value
END WHILE;
END
$$
DELIMITER ;
然后就叫它
CALL procedurename('23, 45, 8, 106, 9, 33');
SELECT * FROM t
23
45
8
106
9
33
您希望这些结果在哪里?在新表中?或者使用Where employer_id INSELECT blah FROM而不是在新表中插入@str。我可以使用@str的值作为select查询中的Where条件。如从mechanics中选择mechanics\u name、mechanics\u id,其中雇主\u id=子字符串_INDEX@str, ',', -1;@sandeep那么你想加入?如果是,请使用WHERE FIND_IN_SETemployer_id,@str>0是的,我已经用FIND_IN_SET进行了测试。但我不知道为什么它只拉一张唱片。举个例子:如果我通过'23,45,8,106,9,33',它只会拉出机械师的名字和机械师的id为23。这有点奇怪。@sandeep你能在sqlfiddle上重新创建问题吗?找到问题并更正了它。SET@str:=子字符串_INDEX@text",","我,;在逗号后加空格。谢谢米海。
CALL procedurename('23, 45, 8, 106, 9, 33');
SELECT * FROM t
23
45
8
106
9
33