2016-03-23 14 views
1

ich die follwing einfache MySQL-Abfrage, die 0 Ergebnisse zurückgibt:MySQL IN-Klausel ohne Anführungszeichen

SELECT d.name FROM document d WHERE 10 IN (d.categories) 

„Kategorien“ ist vom Typ varchar und enthält zum Beispiel „10,20,30“.

Wenn ich die IN-Werte direkt eingeben funktioniert es und gibt ein Ergebnis:

SELECT d.name FROM document d WHERE 10 IN (10,20,30) 

Ich vermute, MySQL Ersatz d.documents mit so etwas wie was natürlich nicht das, was ich will:

SELECT d.name FROM document d WHERE 10 IN ("10,20,30") 

Was ist eine geeignete Problemumgehung dafür?

Antwort

2

Ja mit FIND_IN_SET:

SELECT d.name FROM document d WHERE find_in_set(10, d.categories) > 0 
6

Wenn Sie den Wert als "10,20,30" angeben, wird dieser als ein einzelner Wert behandelt, der Ihren drei erwarteten Werten entspricht. Um den Wert als drei verschiedene Werte zu setzen, müssen Sie die Funktion find_in_set in MySQL verwenden.

Auch würde ich Ihnen vorschlagen, durch diesen Thread zu gehen: Is storing a delimited list in a database column really that bad?

+1

Danke für den Link zu dem anderen Thread! – Alex

+0

@Alex: - Gern geschehen! –

Verwandte Themen