sql >> Database teknologi >  >> RDS >> Mysql

Oprettelse af et relateret eller lignende indlæg ved hjælp af PHP &MySQL

Brug af MySQL fuldtekstsøgning MATCH (col1,col2,...) AGAINST (expr [search_modifier]) ting.

Lad os sige, at din tabel er articles og du skal finde relaterede indlæg om en titel på det aktuelle indlæg. Gør det sådan her:

SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles 
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle') 
ORDER BY score DESC LIMIT 5

Dette vil give dig top 5 relaterede indlæg.

Men husk først at aktivere fuld tekstsøgning for tabellens kolonner ved at køre denne forespørgsel:

ALTER TABLE articles ADD FULLTEXT (title, body);

[EDIT]:Hvorfor ikke bruge LIKE : Præcisering til OP:

For det vil ikke give korrekte resultater. Lad os sige, at din nuværende titel er "Music of 1980", og du vil have relaterede indlæg om det. Nu, hvis du bruger LIKE så vil kun indlæggene indeholde PRÆCIS rækkefølgen af ​​ord "Music of 1980" dukke op. Men hvis du bruger MATCH ... AGAINST , så vises indlæg, der indeholder Music OR 1980. Desuden vil de indlæg, der indeholder både musik og 1980, vises øverst, fordi det giver en SCORE til hvert resultat, og vi sorterer efter den score. Jeg håber, det er klart.

[EDIT]:2 :

Hvis du har kategorier, kan du tilføje AND Category = '$CurrentCategory' i SQL-forespørgslen where clause for at få mere specifikke resultater.

[EDIT]:3:OP kan ikke bruge fuld tekst :

Hvis du ikke kan bruge fuld tekst (af en eller anden grund), kan du bare vise 5 tilfældige indlæg fra samme kategori. Da de er i samme kategori, er de på en eller anden måde relaterede i det mindste:

SELECT *
FROM articles 
WHERE Category = '$CurrentCategory'
LIMIT 5

Redigeret syntaks:Ændrede LIMTI til LIMIT i MySQL-kode



  1. Hvorfor mister Hibernate/JDBC/MySQL forbindelser efter en dag eller deromkring?

  2. Kan du have if-then-else logik i SQL?

  3. SQL Server-fejl ved opdateringskommando - Der opstod en alvorlig fejl på den aktuelle kommando

  4. PDO-opdateringstabel ved hjælp af array