使用数组更新列(Mysql过程)

使用数组更新列(Mysql过程),mysql,arrays,sql-update,procedure,where-in,Mysql,Arrays,Sql Update,Procedure,Where In,我有这样的数组 text_id_array=["1011", "1012", "1013"] 我想将它传递给mysql过程,用于更新与数组成员匹配的列,所以我尝试了 BEGIN UPDATE chat_texts a SET a.read_by=a.read_by+1 WHERE a.text_id IN (text_id_array); END 但它只对数组的第一个成员1011有效。我知道有很多这样的问题,但我找不到解决办法。谢谢你的帮助 如果您对使用非数组方法感兴趣,可能会有所帮助 这

我有这样的数组

text_id_array=["1011", "1012", "1013"]
我想将它传递给mysql过程,用于更新与数组成员匹配的列,所以我尝试了

BEGIN
UPDATE chat_texts a SET a.read_by=a.read_by+1 WHERE a.text_id IN (text_id_array); 
END

但它只对数组的第一个成员1011有效。我知道有很多这样的问题,但我找不到解决办法。谢谢你的帮助

如果您对使用非数组方法感兴趣,可能会有所帮助

这可能有助于您开始:

SET @strIDs ="1011,1012,1013"
UPDATE chat_texts a SET a.read_by=a.read_by+1 WHERE FIND_IN_SET(a.text_id, @strIDs);

现在我找到了。感谢您推荐使用在_集合中查找,但我也注意到我应该将参数更改为VARCHAR。就是这样

CREATE DEFINER=`root`@`localhost` PROCEDURE `aa`(IN `text_array_id` VARCHAR(255))
BEGIN
UPDATE chat_texts a SET a.read_by=a.read_by+1 WHERE FIND_IN_SET(a.text_id, text_array_id);
END

不起作用。还是有同样的问题。我认为主要的问题是将数组传递给过程,因为当我使用
updatechat\u texts时,设置a.read\u by=a.read\u by+1,其中a.text\u id在('1010','1011')
中,它按预期工作,但当我调用过程时,它采用类似于('10101011')的参数,为什么完全在MySQL中这样做?似乎不太可能有人会手动将数组传递给数据库,因为我正在发送一些文本ID,以将它们的读取值转换为DB中的+1。我可以用php循环实现,但我认为在一个数组中发送所有这些ID,并用mysql过程完成rest操作会给我带来更好的性能。我怀疑PHP解决方案会更快。记住在循环内部构建查询,但在循环外部执行查询。