Как можно сравнить массив и столбец из бд?
Добрый день уважаемые форумчане. Мне нужно сделать так, чтобы мой массив сравнивался с столбцом из бд, и проверять, есть ли такой элемент из массива в бд. Например: у меня есть массив array[1,2,3], и мне нужно проверить, есть ли в моей базе данных в столбце где-то 1,2,3. Прилагаю свой код(попытки):
async function checkQuery(object) {
var numbers = [];
for(let i = 0; i < urls[2].length; i++) {
numbers[i] = urls[2][i];
}
console.log(numbers);
sql = 'SELECT id FROM cases WHERE case_number in ("' + numbers.join('","') + '")';
console.log(sql);
await connection.execute(sql, function(err, results, fields) {
console.log(err);
console.log(results.length); // собственно данные
console.log(fields); // мета-данные полей
for(let i = 0; i < results.length; i++) {
if(results[i] === undefined) console.log('не найдено');
else console.log('Дело найдено!');
}
});
}
Ответы (1 шт):
Все зависит от того, какие именно данные хранятся в столбце и каков их посыл.
Если в столбце строка и вам достаточно, чтобы она включала в качестве подстроки какой-либо из элементов массива, то можно перебрать этот массив, представив в виде case_number LIKE '%<numbers[0]>%' OR ... OR case_number LIKE '%<numbers[n]>%', а потом это интегрировать в квери-строку. Проценты по краям строки в sql играют роль регулярных выражений (% - любая - даже и нулевая - последовательность символов). LIKE - это оператор строкового сравнения.
Вот что для всего этого нужно:
async function checkQuery(object) {
let numbers = [];
for (let i = 0; i < urls[2].length; i++) numbers[i] = urls[2][i];
sql = 'SELECT id FROM cases WHERE (' + numbers.map(item=>`case_number LIKE '%${item}%'`).join(' OR ') + ')';
let result = await connection.execute(sql, function(err, results, fields) {
console.log(err);
console.log(results.length); // собственно данные
console.log(fields); // мета-данные полей
for(let i = 0; i < results.length; i++) {
if (results.length === 0) console.log('не найдено');
else console.log('Дело найдено!');
}
});
}
Не в курсе, что вы используете для запроса, потому не знаю точно, какой ответ будет дан в случае не попадания столбца под условие. Если пустой массив - то проверить можно так, как я написал