To není jednoduchá otázka. Nejlepším řešením je použít nějaký typ fulltextové vyhledávání . Fulltextové vyhledávání lze nakonfigurovat tak, aby obsahovalo ignorovaná slova (slova, která jsou z vyhledávání vynechána – jako slovo the
) a může mít také limit minimální délky slova (slova kratší než určité znaky jsou z vyhledávání také vynechány.
Pokud však jednoduše použijete
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Poté MySQL vrátí nejen záznam s hodnotou, kterou jste hledali, ale také záznamy, které obsahují pouze některá slova, a to v různém pořadí. Ten, který jste ukázali, bude pravděpodobně jeden z nejvýše hodnocených, ale není zaručeno, že bude nejvýše hodnocený.
Možná budete chtít použít Booleovské fulltextové vyhledávání
a přidat +
na každé hledané slovo, aby MySQL vrátilo pouze ty záznamy, které obsahují všechna hledaná slova:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Ale on
by mělo být buď ignorované slovo (je na výchozích seznamech klíčových slov), nebo by mělo být kratší než minimální délka slova, takže by mělo být z vyhledávacího výrazu vynecháno (nezískáte zpět žádné výsledky):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Vím, že to vyžaduje úpravu vyhledávacího výrazu, ale díky vestavěné funkcionalitě MySQL získáte nejlepší výsledky.
Alternativou je použití jiných fulltextových vyhledávačů, jako je sfinga k provedení vyhledávání za vás.