mysql - 调用存储过程,其中 'IN' 变量之一是来自 Express API 的列表

标签 mysql node.js express stored-procedures

我有一个 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/

相关文章:

c# - 数据为空 无法在空值上调用此方法或属性 错误不断出现

php - 编码行出现在每个关闭的 div 之后。 (仅在 DOM 检查器中)

node.js - 在 REST API 中请求文档与文档详细信息的正确架构是什么?

node.js - Express.js 中的自定义回调 get

node.js - 使用 Vows 和 Tobi 进行 Web 应用程序测试

mysql - 在 Mule 中限制 Mule 消息

php - 在php-mysql中,如何将sql查询的结果合并到结果表的单元格中?

node.js - 尝试从 github 创建示例项目时出现 ionic beta 错误

mysql - EPERM : operation not permitted error : Prisma . 输入命令后 'npx migrate dev --name init'

javascript - 如何将 Bootstrap 添加到 ExpressJS 中的项目?