Plusieurs, COMME dans sqlite
Je suis en train de créer une fonction de recherche.
Si le champ de saisie de recherche est "foo bar", je l'ai divisée en deux mots-clés, puis faire cette requête:
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
Le nombre de mots-clés peut être plus élevé si je pourrais avoir besoin de plus de "j'aime". Aussi le nombre de "clé" permettant de gagner 🙂
Est-il possible de simplifier cette requête? Puis-je faire quelque chose comme LIKE("%foo%", "%bar%")
?
Après beaucoup de lecture, j'ai été capable de faire ce que vous avez besoin, sans installation de REGEXP imp ou FTS3 et FTS4 extensions, de vérifier ma solution
OriginalL'auteur Anna K. | 2013-08-24
Vous devez vous connecter pour publier un commentaire.
Si vous avez SQLite FTS3 et FTS4 Extensions activé, alors vous pouvez prendre avantage de la Recherche Plein Texte (FTS). Vous devrez recréer l'
p_extra_fields
table comme unVIRTUAL
table. Ensuite, vous pouvez insérerOR
entre vos termes de recherche et l'utilisation de laMATCH
opérateur...Bonne info ici aussi.
Cliquez sur ici de le voir en action à SQL Violon.
p_extra_fields
table?Oui, désolé, devrait avoir expliqué que. Réponse de mise à jour.
Nice, après quelques recherches, a été en mesure de le faire sans l'aide de
regex
etmatch
, de vérifier ma solution 🙂OriginalL'auteur davmos
Je pense que ce
where
clause est plus simple:OriginalL'auteur Gordon Linoff
J'avais même exigence et je cherchais un mécanisme qui permettrait un match comme
REGEXP "A|B|C"
qui signifie que le match soitA
,B
,C
.Donc finalement c'est la solution je suis venu avec:
Les critères de correspondance est équivalent à @Gordon réponse:
Mais cela vous donne la flexibilité de la comparaison des valeurs de manière dynamique en fonction de votre paramètre de requête ( vous pouvez extraire les
"foo,bar"
être un paramètre).E. g sans changer votre requête, vous pouvez passer
"foo,bar,boo"
et jusqu'match similaire à la correspondance de la regex:"foo|bar|boo"
OriginalL'auteur dsharew