这个问题在这里已经有了答案:
在mysql中如何将逗号分隔的值传递给存储过程(1个答案)
两年前关门了。
我被一个问题困住了,从6个小时以来一直在寻找解决办法。
我使用php调用一个存储过程,通过传递一组用户id来获取不同用户的任务。我把用户ID和 ,
.
$user_id_string = "59,49"; // The user IDs have been converted as string using implode function on an array.
$d = DB::select(DB::raw('call fetch_tasks("'.$user_id_string.'")'));
存储过程只有一个简单的查询,如:
select firstname from users where id in (uids)
在这里,我将uid声明为varchar(255)作为in参数。
问题
当我调用函数时,我得到 firstname
用户id 59的。如果我硬编码sp中的值,比如(59,49),我会得到两个用户的名字。
预期
它应该会回来 firstname
两个都是。
拜托,帮帮我的人。
更新1: Hard coded:
CREATE DEFINER=`root`@`localhost` PROCEDURE `fetch_tasks`(IN `cur_lat` VARCHAR(255), IN `cur_lng` VARCHAR(255), IN `uids` VARCHAR(255)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER SELECT id, firstname from users where id in (59,49)
By passing variable:
```
CREATE DEFINER=root
@localhost
PROCEDURE fetch_tasks
(IN cur_lat
VARCHAR(255), IN cur_lng
VARCHAR(255), IN uids
VARCHAR(255)) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER SELECT id, firstname from users where id in (uids)
1条答案
按热度按时间5w9g7ksd1#
您可以将ID存储在列表中,然后使用foreach获得他们的名字,如下所示:
看看这个链接:sql where id in(id1,id2,…,idn)