Вызов хранимой процедуры, в которой одной из переменных IN является список из Express API. - PullRequest
1 голос
/ 24 марта 2019

У меня есть Express API, который получает параметры из моего приложения React.Есть несколько полей выбора, где они могут иметь несколько вариантов, в моем случае это бейсбольные сезоны.Доступны варианты 2018, 2017, 2016. Таким образом, пользователь может выбрать один или все из них одновременно.Это отправляется в мое приложение Express, где я использую соединение для них, чтобы создать одну строку параметров.Поэтому, если пользователь выбирает 2018 и 2016, строка «2018,2016» отправляется в мою хранимую процедуру MySQL.

Вот моя хранимая процедура:

CREATE DEFINER='mysqlAdmin'@'%' PROCEDURE 'testproc'(in playerID int(6), in seasons varchar(100)) BEGIN select ReleaseSpeed, EventID, LaunchAngle from Pitches where BatterID=playerID and YEAR(GameDate) in (seasons) and LaunchAngle is not null order by ReleaseSpeed desc limit 5; END

Вот звонок из моего приложения Express:

const sql = "call testproc(?,?);";
  db.query(sql, [players[0],seasons], function(err, result, fields){
    if(err) throw err;
    console.log(result);
});

Проблема в том, что явызовите хранимую процедуру с параметрами, которые она получает только с тональностями, для которых выбраны даты в первом году, в данном случае 2018. Как получить строку, которая будет действовать как два отдельных целых числа, так что часть запроса IN работаеткак задумано?

1 Ответ

0 голосов
/ 24 марта 2019

Самый простой способ решить эту проблему - использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...