我有一个像
这样的查询Select id,name,... FROM table WHERE id IN (?)
查询实际上更复杂的是连接和另一个(?)具有相同的ID。我被告知要把它放在存储过程上以便于管理和更安全,但是mysql不支持数组,所以我不确定最好的方法是什么,考虑到我不知道我将要通过多少身份证。我见过人们传递一个字符串。这是唯一的方法吗?
答案 0 :(得分:0)
您可以使用临时表。虽然这个答案没有高度投票,但我认为使用字符串参数是首选方式(17票对2票)(见链接)。临时表的答案取自另一个问题:Pass array to MySQL stored routine
使用临时表的连接。你不需要通过临时的 表到函数,它们是全局的。
create temporary table ids( id int ) ;
insert into ids values (1),(2),(3) ;
delimiter //
drop procedure if exists tsel //
create procedure tsel() -- uses temporary table named ids. no params
READS SQL DATA
BEGIN
-- use the temporary table `ids` in the SELECT statement or
-- whatever query you have
select * from Users INNER JOIN ids on userId=ids.id ;
END //
DELIMITER ;
CALL tsel() ; -- call the procedure