Korzystanie z wyszukiwania pełnotekstowego MySQL MATCH (col1,col2,...) AGAINST (expr [search_modifier])
rzecz.
Załóżmy, że Twoja tabela to articles
i musisz znaleźć powiązane posty o tytule bieżącego posta. Zrób to tak:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
W ten sposób otrzymasz 5 najlepszych powiązanych postów.
Ale najpierw pamiętaj, aby włączyć wyszukiwanie pełnotekstowe dla kolumn tej tabeli, uruchamiając to zapytanie:
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDYTUJ]:Dlaczego nie używać LIKE
: Wyjaśnienie do OP:
Ponieważ nie da poprawnych wyników. Załóżmy, że twój obecny tytuł to „Muzyka roku 1980” i potrzebujesz powiązanych postów na ten temat. Teraz, jeśli używasz LIKE
wtedy pojawią się tylko posty zawierające DOKŁADNIE ciąg słów „Muzyka 1980”. Jeśli jednak użyjesz MATCH ... AGAINST
, pojawią się posty zawierające Music OR 1980. Ponadto posty zawierające zarówno Muzykę, jak i 1980 pojawią się na górze, ponieważ daje to SCORE
do każdego wyniku i sortujemy według tego wyniku. Mam nadzieję, że to jasne.
[EDYTUJ]:2 :
Jeśli masz kategorie, możesz dodać AND Category = '$CurrentCategory'
w zapytaniu SQL where clause
aby uzyskać bardziej szczegółowe wyniki.
[EDYTUJ]:3:OP nie może używać pełnego tekstu :
Jeśli nie możesz użyć pełnego tekstu (z jakiegoś powodu), możesz po prostu pokazać 5 losowych postów z tej samej kategorii. Ponieważ należą do tej samej kategorii, są przynajmniej w jakiś sposób powiązane:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Edytowana składnia:Zmieniono LIMTI na LIMIT w kodzie MySQL