Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tworzenie powiązanych lub podobnych postów przy użyciu PHP i MySQL

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć zduplikowane rekordy w bazie mysql?

  2. Czy zapytanie PHP MYSQL może ignorować pustą zmienną w klauzuli WHERE?

  3. połącz się z lokalnym serwerem MySQL przez gniazdo

  4. Usuń wszystkie wiersze ze znacznikiem czasu starszym niż x dni

  5. Czy MySQL może niezawodnie przywracać kopie zapasowe zawierające widoki, czy nie?