To nie jest proste pytanie. Najlepiej jest użyć jakiegoś typu wyszukiwania pełnotekstowego . Wyszukiwanie pełnotekstowe można skonfigurować tak, aby zawierało odrzucane słowa (słowa, które są pomijane w wyszukiwaniu - jak słowo the
) i może mieć również minimalny limit długości słowa (słowa o długości mniejszej niż pewna liczba znaków są również pomijane w wyszukiwaniu.
Jeśli jednak po prostu użyjesz
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Wtedy MySQL zwróci nie tylko rekord z poszukiwaną wartością, ale także rekordy zawierające tylko niektóre słowa i w innej kolejności. Ten, który pokazałeś, będzie prawdopodobnie jednym z najwyżej sklasyfikowanych, ale nie ma gwarancji, że będzie to najwyżej sklasyfikowany.
Możesz użyć przeszukiwania pełnego tekstu logicznego
i dodaj +
do każdego wyszukiwanego słowa, aby zmusić MySQL do zwracania tylko tych rekordów, które zawierają wszystkie wyszukiwane słowa:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Ale on
powinien albo być odrzucanym słowem (znajduje się na domyślnych listach słów kluczowych) lub powinien być krótszy niż minimalna długość słowa, więc powinien zostać pominięty w wyszukiwanym wyrażeniu (nie otrzymasz żadnych wyników):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Wiem, że wymaga to zmiany wyrażenia wyszukiwania, jednak zapewni to najlepsze wyniki przy użyciu wbudowanej funkcjonalności MySQL.
Alternatywą jest użycie innych wyszukiwarek pełnotekstowych, takich jak sfinks aby przeprowadzić wyszukiwanie za Ciebie.