Mysql выбрать, где поле в CSV-строке

0

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

Каков самый быстрый способ сделать это? Должен ли я вставлять значения во временную таблицу и присоединяться к этому? Или есть способ сделать это с одним утверждением?

Спасибо

Теги:
csv

2 ответа

1
Лучший ответ

НОВЫЙ ОТВЕТ -

Хорошо, вам нужно сделать что-то подобное, как показано ниже. Я предполагаю, что ваша строка csv будет указана в переменной @str ниже. Кроме того, вам нужно убедиться, что ваша строка (или arraystring) должна иметь этот формат с одинарными кавычками для каждого элемента -

set @str = "'some1','some2','some3'";
set @qry1 = CONCAT('select * from testing where col1 in (',@str,')');

prepare stmt1 from @qry1;
execute stmt1;
deallocate prepare stmt1; 

СТАРЫЙ ОТВЕТ -

Я предполагаю, что вы пройдете путь csv файла к сохраненному процессу и прочитаете строки в csv в том, что хранится proc. Таким образом, вы можете хранить все эти значения поля csv в таблице temp и писать запрос, используя IN -

select * from sourceTable 
where fieldValue in (select csvFieldValue from #temptable)
  • 0
    Нет, это не файл, а текстовое поле типа «token1, token2, token3» и т. Д., Которое передается в качестве параметра.
  • 0
    @Chris - отредактировал мой ответ. Протестировано с заданной строкой, и она отлично работает. Возможно, вам придется сделать некоторые манипуляции с массивом строк, которые у вас есть.
Показать ещё 1 комментарий
0

Был ли поиск и нашел отличный ответ.:)

Используйте функцию строки MySql FIND_IN_SET.

Пример использования:

SET @csvStr = "val1,val2,val3";

SELECT Col1
  FROM Table1
 WHERE FIND_IN_SET(Col2, @csvStr) > 0;

Я отредактировал текущий ответ с помощью "Новый ответ" и "Старый ответ", указав, что новый ответ открывает вашу систему для уязвимости SQL Injection.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню