2010-02-02 11 views
7

Ich habe Scheuern verschiedene MySQL-Sites in der Hoffnung, etwas zu finden, die mich zu verwenden, in ermöglichen es diese zu drehen:MySQL Split „SELECT WHERE IN“ Anweisung

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

In diesem (unter der Annahme, dass meine Parameter werden irgendwie zu den Werten, die du im IN-Block siehst):

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

Aber ich habe nicht viel Erfolg! Die beste Seite, die ich gefunden habe, war: dev.mysql.com, die das Teilen von Strings auf der Grundlage eines Trennzeichens (',' in meinem Fall) diskutiert, obwohl es keine Antworten aufgetaucht ist ...

Kennt jemand von eine gute Möglichkeit, eine durch Kommas getrennte Zeichenfolge in eine Gruppe von Zeichenfolgen aufzuteilen, die in diesem Kontext verwendet werden können?

+0

Sie wollen String mittels mysql oder mittels C# teilen? – tga

+0

Hallo TGadfly, ich werde etwas wie '' a ',' b ',' c '' in SQL von C# übergeben, um IN ('a', 'b', 'c') zu benutzen, aber natürlich (Sodschen Gesetz) das funktioniert nicht! Danke für deine Korrespondenz! –

Antwort

6

Es ausführen kann nicht alle Flexibilität, die Sie brauchen, aber die MySQL FIND_IN_SET Funktion könnte seinen suffic ient. Es gibt eine harte Grenze von maximal 64 Werten in der Menge, mit der man vergleichen kann.

Zum Beispiel:

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

Dies ist ein Beispiel für die Verwendung einer in-line MySQL SET ('a, b, c, d') - seine sorten einer ENUM. Es Mai ein Zeichen sein, dass etwas mit der Normalisierung des Datenmodells ist schief, wenn diese verwendet werden. Sie können jedoch nützlich sein, um einen Join zu eliminieren oder (wie in diesem Fall) mit komplexen Informationen zu verknüpfen, die sich außerhalb der Datenbank befinden.

+0

Hervorragende Antwort Martin! Ich habe versucht, eine WHERE-Klausel anzuwenden und mich selbst in ein richtiges Durcheinander zu manövrieren, um herauszufinden, warum es nicht funktioniert hat! Vielen Dank! –

0

können Sie dynamische SQL verwenden


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

Sie haben etwas zu tun, wie diese

Sie einen Teil der SQL-Abfrage haben

SELECT * FROM mytable WHERE parametertype IN(
dann Sie verbinden es mit einem String als Parameter übergeben „ 'a' , ‚b‘, ‚c‘, ‚d‘“, wie oben CONCAT Funktion zum Beispiel in stmp und anschließend stmp

+0

TGadfly, was ist das PFILE? Es tut mir leid, dich zu belästigen! –

+0

Es war nur ein Beispiel für die Ausführung von Zeichenfolge als sql Sie können diese Zeichenfolge dynamisch erstellen, wenn Sie Zeichenfolge 'a', 'b' als Parameter mysql erkennt es als eine Zeichenfolge, aber wenn Sie es mit einem anderen Ende der Zeichenfolge beitreten dann rufe execute your_string_name auf, es wird als ein Array von Parametern erkannt – tga

+0

Bleibt das nicht für SQL-Injection offen? –

Verwandte Themen