Това не е прост въпрос. Най-добре е да използвате някакъв тип търсене в пълен текст . Търсенето в пълен текст може да бъде конфигурирано да има стоп думи (думи, които са пропуснати от търсенето - като думата the
) и може да има ограничение за минимална дължина на думата (думи с по-малко от определени знаци също се пропускат от търсенето.
Ако обаче просто използвате
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Тогава MySQL ще върне не само записа със стойността, която търсите, но и записите, които имат само някои от думите и в различен ред. Този, който показахте, вероятно ще бъде един от най-високо класираните, но няма гаранция, че ще бъде най-високо класираният.
Може да искате да използвате булево пълнотекстово търсене
и добавете +
към всяка дума за търсене, за да принуди MySQL да върне само онези записи, в които присъстват всички думи за търсене:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Но on
трябва да бъде или стоп дума (тя е в списъците с думи по подразбиране) или трябва да е по-къса от минималната дължина на думата, така че трябва да бъде пропусната от израза за търсене (няма да получите никакви резултати):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Знам, че това изисква промяна на израза за търсене, но това ще ви даде най-добри резултати, като използвате вградената функционалност на MySQL.
Алтернативата е да използвате други търсачки с пълен текст, като сфинкс за да извърши търсенето вместо вас.