Mehrere WIE in sqlite
Ich versuche zu schaffen, eine Suche-Funktion.
Wenn das Eingabefeld für die Suche ist "foo bar", habe ich es aufgeteilt in zwei keywords, dann tun Sie dies-Abfrage:
SELECT p.* FROM p_extra_fields as x INNER JOIN products as p ON x.product = p.id
WHERE x.type = "1"
AND
(
(x.key = "model" AND x.value LIKE "%foo%")
OR (x.key = "model" AND x.value LIKE "%bar%")
OR (x.key = "color" AND x.value LIKE "%foo%")
OR (x.key = "color" AND x.value LIKE "%bar%")
OR (x.key = "make" AND x.value LIKE "%foo%")
OR (x.key = "make" AND x.value LIKE "%bar%")
)
GROUP BY x.product LIMIT 0, 50
Die Anzahl der keywords kann höher sein, so könnte ich brauchen mehr "likes". Auch die Anzahl der "Schlüssel" erhöhen können 🙂
Gibt es eine Möglichkeit, ich könnte vereinfachen diese Abfrage? Kann ich etwas tun, wie LIKE("%foo%", "%bar%")
?
- Nach viel Lesen, war ich in der Lage, das zu tun, was Sie brauchen-ohne Installation REGEXP imp oder FTS3 und FTS4-Erweiterungen, prüfen Sie meine Lösung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie SQLite FTS3 und FTS4-Erweiterungen aktiviert, dann können Sie die Vorteile von Full-Text Search (FTS) - Funktionen. Sie müssen wieder
p_extra_fields
Tabelle alsVIRTUAL
Tabelle. Dann können SieOR
zwischen Ihre Suchbegriffe ein, und verwenden Sie dieMATCH
Betreiber...Gute info hier auch.
Klicken Sie auf hier zu sehen, Sie in Aktion auf SQL Fiddle.
p_extra_fields
Tabelle?regex
undmatch
, meine Lösung 🙂Ich denke, das
where
Klausel ist einfacher:Ich hatte die gleiche Anforderung und ich war auf der Suche nach einem Mechanismus ein match wie
REGEXP "A|B|C"
was bedeutet, dass Spiel entwederA
,B
,C
.So, schließlich ist dies die Lösung, die ich kam mit:
Den matching-Kriterien entspricht @Gordon ' s Antwort:
Aber dies gibt Ihnen die Flexibilität, die passenden Werte dynamisch je nach query-parameter ( Sie können Sie zu extrahieren
"foo,bar"
parameter sein).E. g, ohne Ihre Abfrage können Sie pass
"foo,bar,boo"
und bis zum match ähnlich wie regex-match:"foo|bar|boo"