我有一个 Express API,可以从我的 React 应用程序中获取选项。有多个选择框,可以在其中选择多个选项,在我的例子中是棒球赛季。选项为 2018、2017、2016。因此用户可以一次不选择或全部选择。它被发送到我的 Express 应用程序,我在其中使用连接来创建单个选项字符串。因此,如果用户选择 2018 和 2016,字符串“2018,2016”将发送到我的 MySQL 存储过程。
这是我的存储过程:
CREATE DEFINER='mysqlAdmin'@'%' PROCEDURE 'testproc'(在 playerID int(6) 中,在 seasons varchar(100) 中)
开始
从 Pitches 中选择 ReleaseSpeed、EventID、LaunchAngle,其中 BatterID=playerID 和 YEAR(GameDate) in (seasons) 并且 LaunchAngle 不为 null order by ReleaseSpeed desc limit 5;
结束
这是来 self 的 Express 应用的调用:
const sql = "call testproc(?,?);";
db.query(sql, [players[0],seasons], function(err, result, fields){
if(err) throw err;
console.log(result);
});
问题是,当我使用选项调用存储过程时,它只会得到具有所选第一年日期的音高的结果,在本例中为 2018 年。我怎样才能让字符串像两个单独的整数一样工作,所以IN
部分查询是否按预期工作?
最佳答案
解决此问题的最简单方法是使用 FIND_IN_SET
这是为在逗号分隔列表中查找值而设计的:
select ReleaseSpeed, EventID, LaunchAngle
from Pitches
where BatterID=playerID and FIND_IN_SET(YEAR(GameDate), seasons) and LaunchAngle is not null
order by ReleaseSpeed desc
limit 5;
关于mysql - 调用存储过程,其中 'IN' 变量之一是来自 Express API 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55320067/