2010-02-02 13 views
7

He estado buscando en diferentes sitios de MySQL con la esperanza de encontrar algo que me permitirá convertir esto:MySQL Split a utilizar en "Seleccionar el lugar donde IN" declaración

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

Dentro de este (suponiendo que mis parámetros de alguna manera se están convirtiendo en los valores que se ven en el bloque IN):

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

¡Pero no estoy teniendo mucho éxito! El mejor sitio que he encontrado ha sido: dev.mysql.com, que discute la división de cadenas basada en un delimitador (',' en mi caso) aunque no ha encontrado ninguna respuesta ...

¿Alguien sabe de una buena forma de dividir una cadena delimitada por comas en un grupo de cadenas que se pueden usar en este contexto?

+0

¿desea dividir la cadena por medio de mysql o por medio de C#? – tga

+0

Hola TGadfly, voy a pasar algo como "'a', 'b', 'c'" en SQL desde C# para poder usar IN ('a', 'b', 'c') pero por supuesto (la ley de sod) eso no funciona! Gracias por su correspondencia! –

Respuesta

6

puede no tiene toda la flexibilidad que necesita, pero la función de MySQL FIND_IN_SET podría ser suffic ient. Hay un límite estricto de un máximo de 64 valores en el conjunto para comparar con though.

Por ejemplo:

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

Este es un ejemplo de la utilización de una línea en MySQL SET ('a, b, c, d') - su clase-de una enumeración. Es puede ser un signo de que algo anda mal con la normalización del modelo de datos si estos se están utilizando. Sin embargo, pueden ser útiles para eliminar una unión, o (como en este caso) para asociar con información compleja que reside fuera de la base de datos.

+0

Excelente respuesta Martin! ¡Intenté aplicar una cláusula WHERE y meterme en un lío correcto para descubrir por qué no funcionaba! ¡Muchas gracias! –

0

puede utilizar SQL dinámico


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

que tiene que hacer algo como esto

tiene una parte de consulta SQL

SELECT * FROM mytable WHERE parametertype IN(
continuación, se une con una cadena que se pasa como parámetro " 'a' , 'b', 'c', 'd'" usando la función CONCAT por ejemplo, en STMP como antes y después ejecutar STMP

+0

TGadfly, ¿qué es este PFILE? Perdón por molestarlo! –

+0

IT era solo un ejemplo de ejecución de cadena como sql puede crear esta cadena de forma dinámica si pasa cadena 'a', 'b' como un parámetro mysql lo reconoce como una cadena, pero si lo une con otra cadena final luego ejecuta execute your_string_name, se reconocerá como una matriz de parámetros – tga

+0

¿Esto no me deja abierto a SQL-Injection? –

Cuestiones relacionadas