2009-05-07 9 views
1

Ich habe eine Tabelle mit mehreren Feldern und ein Feld mit 3 Comma Separated Values ​​MySql: SELECT-Anweisung in Operator

Column 1 Column 2 
    1  1,2,3 
    2  2,3,4 
    3  6,7,8 

Jetzt möchte ich eine SQL-Abfrage auszuführen, die mir die Zeilen abruft, die den Wert i als Eingabe senden.

Wenn ich wie im obigen Beispiel einen Wert 2 als Eingabe an die Funktion sende, müssen die ersten 2 Zeilen zurückgegeben werden.

Ich versuchte mit dem IN-Operator, aber fehlgeschlagen, da es nicht die Zeilen abrufen, die die Eingabe ich als den zweiten oder dritten Wert der CSV senden. In diesem Beispiel wird die erste Zeile nicht zurückgegeben.

Kann mir bitte jemand dabei helfen?

Vielen Dank im Voraus, Akash

+1

Nur als eine Anmerkung: Sie erkennen, dass dies ein hässlicher Missbrauch einer Datenbank ist? Ein Feld sollte nur einen einzigen Wert enthalten ("Atomizität"). – sleske

Antwort

3

können Sie FIND_IN_SET() verwenden:

SELECT column1 FROM table WHERE FIND_IN_SET('2', column2) != 0 

Der IN Operator ist im Grunde eine Abkürzung für viele OPs:

WHERE column2 = IN ('a', 'b', 'c') 

gibt das gleiche Ergebnis wie

WHERE (column2 = 'a' OR column2 = 'b' OR column2 = 'c') 
+0

Vielen Dank für die schnelle Antwort. –

0

Wenn ich Ihre Frage richtig verstanden habe dann, wie zu versuchen - wähle Column1, Column2 aus der Tabelle, wo Column1 < =

prost

0

sollten Sie in der Lage sein, wie zu verwenden, dies zu tun, so etwas wie:

SELECT * FROM tablename WHERE [Column 2] LIKE ("%2%"); 
+0

Dies funktioniert nur, wenn alle Zahlen einstellig sind, andernfalls wird z. 12 oder 21 – Greg

+0

Wahr, obwohl Sie ein komplexeres Muster verwenden könnten, um z. "%, 2,%" oder abhängig davon, wie die Nummerierung funktioniert, stimmt nur mit dem Platzhalter auf einer Seite überein. – Jona