Ich habe ein Feld COLORS (varchar(50))
in meiner Tabelle SHIRTS
, das eine durch Kommas getrennte Zeichenfolge enthält, wie z 1,2,5,12,15,
. Jede Zahl repräsentiert die verfügbaren Farben.
Wenn select * from shirts where colors like '%1%'
ich die Abfrage ausführe , um alle roten Hemden (Farbe = 1) zu erhalten, erhalte ich auch die Hemden, deren Farbe grau (= 12) und orange (= 15) ist.
Wie soll ich die Abfrage so umschreiben, dass NUR die Farbe 1 und nicht alle Farben mit der Nummer 1 ausgewählt werden?
Antworten:
Der klassische Weg wäre, links und rechts Kommas hinzuzufügen:
Find_in_set funktioniert aber auch:
quelle
FIND_IN_SET ist in diesem Fall dein Freund
quelle
Schauen Sie sich die Funktion FIND_IN_SET für MySQL an.
quelle
Das wird sicher funktionieren und ich habe es tatsächlich ausprobiert:
Versuche es !!!
quelle
Wenn der Satz von Farben mehr oder weniger fest ist, besteht die effizienteste und auch am besten lesbare Möglichkeit darin, Zeichenfolgenkonstanten in Ihrer App zu verwenden und dann den MySQL-
SET
Typ mitFIND_IN_SET('red',colors)
in Ihren Abfragen zu verwenden. Bei Verwendung desSET
Typs mit FIND_IN_SET verwendet MySQL eine Ganzzahl zum Speichern aller Werte und verwendet Binärwerte"and"
, um das Vorhandensein von Werten zu überprüfen. ist weitaus effizienter als das Scannen einer durch Kommas getrennten Zeichenfolge.In
SET('red','blue','green')
,'red'
würde intern als gespeichert1
,'blue'
würde intern als gespeichert2
und'green'
würde intern als gespeichert4
. Der Wert'red,blue'
würde als3
(1|2
) und'red,green'
als5
(1|4
) gespeichert .quelle
Wenn Sie MySQL verwenden, gibt es eine Methode REGEXP, die Sie verwenden können ...
http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
Dann würden Sie also verwenden:
quelle
Sie sollten Ihr Datenbankschema tatsächlich so korrigieren, dass Sie drei Tabellen haben:
Wenn Sie dann alle roten Shirts finden möchten, führen Sie eine Abfrage wie folgt durch:
quelle
Funktioniert bei mir
quelle
1. Für MySQL:
2.Für Postgres SQL:
Beispiel
quelle
Sie können dies erreichen, indem Sie die folgende Funktion ausführen.
Führen Sie die folgende Abfrage aus, um eine Funktion zu erstellen.
Und rufen Sie diese Funktion so auf
quelle
Alle Antworten sind nicht wirklich richtig. Versuchen Sie Folgendes:
quelle