J'essaie de créer une fonction de recherche.
Si le champ Entrée de recherche est "FOO BAR", je l'ai divisé en deux mots-clés puis faites cette requête: P>
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
3 Réponses :
Je pense que ce où la clause code> est plus simple:
Si vous avez p_extra_fields code> sous forme de
virtuel code>
table. Ensuite, vous pouvez insérer ou code> entre vos termes de recherche et utilisez l'opérateur code> correspondant code>
SELECT p.*
FROM p_extra_fields x
JOIN products p ON p.id = x.product
WHERE x.key IN ('model', 'color', 'make')
AND x.type = '1'
AND x.value MATCH 'foo OR bar'
GROUP BY x.product LIMIT 0, 50;
Donc, je dois faire une table virtuelle qui est une copie de mon p_extra_fields code> table?
Nice, après que certaines recherches ont été capables de le faire sans utiliser Regex code> et
correspondent code>, cochez ma solution :)
Note importante: comme ("% foo%") cherche des mots contenant 'foo'; Match 'Foo' recherche des mots égaux à "FOO". Autant que je sache, avec FTS, vous ne pouvez pas rechercher de mots contenant un autre mot
J'ai eu la même exigence et je cherchais un mécanisme qui serait un match comme Enfin, c'est la solution que j'ai proposée: p> Les critères correspondants sont équivalents à @ Réponse de Gordon: p> Mais cela vous donne la possibilité de faire correspondre les valeurs de manière dynamique en fonction de votre paramètre de requête (vous pouvez extraire Par exemple, sans changer votre requête, vous pouvez passer Regexp "A | B | C" Code>, ce qui signifie correspondant à
a code>,
B code>,
C code>.
"foo, bar" Code> Pour être un paramètre). p>
"FOO, BAR, BOO" CODE> et JUST correspondance similaire à Regex Match:
"FOO | bar | boo " code> p> p>
Après beaucoup de lecture, j'ai pu faire ce dont vous avez besoin sans installer Regexp Imp ou FTS3 et FTS4 Extensions, vérifiez ma solution.