MySQL Split для использования в операторе «SELECT WHERE IN» - PullRequest
7 голосов
/ 02 февраля 2010

Я обыскивал различные сайты MySQL в надежде найти что-то, что позволит мне превратить это:

var parameters = "a,b,c,d"; // (Could be any number of comma-delimited values)

В это (при условии, что мои параметры так или иначе становятся значениями, которые вы видите вВ блоке):

SELECT * FROM mytable WHERE parametertype IN('a', 'b', 'c', 'd');

Но я не добиваюсь большого успеха!Лучший сайт, который я нашел, был: dev.mysql.com , на котором обсуждается разделение строк на основе разделителя (',' в моем случае), хотя он не дал никаких ответов...

Кто-нибудь знает хороший способ разбиения строки, разделенной запятыми, на группу строк, которые можно использовать в этом контексте?

Ответы [ 2 ]

6 голосов
/ 03 февраля 2010

Возможно, он не обладает необходимой гибкостью, но функции MySQL FIND_IN_SET может быть достаточно.Хотя в наборе есть жесткое ограничение не более 64 значений.

Например:

SELECT  *
FROM    mytable
WHERE   FIND_IN_SET( parametertype, 'a,b,c,d' ) != 0

Это пример использования встроенного MySQL SET ('a, b, c, d') - это своего рода перечисление.Это может быть признаком того, что что-то не так с нормализацией модели данных, если они используются.Но они могут быть полезны для устранения объединения или (как в этом случае) для связи со сложной информацией, которая находится вне базы данных.

0 голосов
/ 02 февраля 2010

вы можете использовать динамический sql


delimiter //; 
create procedure tst() 
begin 
prepare stmp from 'INSERT INTO LOGG SELECT PFILE_Filename FROM PFILE_FILE'; 
execute stmp; 
deallocate prepare stmp; 
end// 
delimiter ;//

ты должен сделать что-то вроде этого

у вас есть часть SQL-запроса

 SELECT * FROM mytable WHERE parametertype IN( 
, затем вы присоединяете ее к строке, передаваемой в качестве параметра «a», «b», «c», «d» с помощью функции CONCAT например, в stmp, как указано выше, а затем выполните stmp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...