`where in`只获取存储过程mysql中的第一个值

6yoyoihd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(259)

这个问题在这里已经有了答案

在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)

5w9g7ksd

5w9g7ksd1#

您可以将ID存储在列表中,然后使用foreach获得他们的名字,如下所示:

foreach (id in myIdList)
{
  firstname_user = GetFirstNameByQuery("SELECT firstname FROM users WHERE id = " + id);
  myStringList.Add(firstname_user);
}

看看这个链接:sql where id in(id1,id2,…,idn)

相关问题