2010-02-02 8 views
7

ho raschiando vari siti di MySQL nella speranza di trovare qualcosa che mi permetterà di trasformare questo:MySQL Split da utilizzare in "SELECT DOVE IN" dichiarazione

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

In questa (supponendo che i miei parametri stanno diventando in qualche modo i valori che vedi nel blocco IN):

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

Ma non sto avendo un grande successo! Il miglior sito che ho trovato è stato: dev.mysql.com, che discute la divisione delle stringhe in base a un delimitatore (',' nel mio caso) anche se non ha trovato nessuna risposta ...

Qualcuno sa di un buon modo di dividere una stringa delimitata da virgole in un gruppo di stringhe che possono essere utilizzate in questo contesto?

+0

si desidera dividere stringa per mezzo di mysql o tramite C#? – tga

+0

Ciao TGadfly, passerò qualcosa come "'a', 'b', 'c'" in SQL da C# per usare IN ('a', 'b', 'c') ma ovviamente (legge di sod) che non funziona! Grazie per la tua corrispondenza! –

risposta

6

Esso non può avere tutta la flessibilità necessaria, ma la funzione di MySQL FIND_IN_SET potrebbe essere suffic iente. C'è un limite rigido di un massimo di 64 valori nell'insieme da confrontare con se.

Ad esempio:

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

Questo è un esempio di utilizzo di un filtro in linea MySQL SET ('a, b, c, d') - sua specie-di un'enumerazione. È può essere un segno che qualcosa è storto con la normalizzazione del modello di dati se questi vengono utilizzati. Ma possono essere utili per eliminare un join o (come in questo caso) per associare informazioni complesse che risiedono al di fuori del database.

+0

Risposta superba Martin! Stavo cercando di applicare una clausola WHERE e di trovarmi in un pasticcio giusto per capire perché non stava funzionando! Grazie mille! –

0

è possibile utilizzare SQL dinamico


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

devi fare qualcosa di simile

si dispone di una parte della query SQL

SELECT * FROM mytable WHERE parametertype IN(
allora si partecipa con una stringa passata come parametro " 'a' , 'b', 'c', 'd'" usando la funzione CONCAT per esempio in SMTP come sopra e quindi eseguire stmp

+0

TGadfly, cos'è questo PFILE? Mi dispiace disturbarti! –

+0

IT era solo un esempio di esecuzione di stringhe come sql è possibile creare dinamicamente questa stringa se si passa la stringa 'a', 'b' come parametro mysql lo riconosce come stringa, ma se ci si unisce con un'altra stringa fine quindi chiama execute your_string_name sarà riconosciuto come una matrice di parametri – tga

+0

Questo non mi lascia aperto a SQL-Injection? –