sql >> Databasteknik >  >> RDS >> Mysql

Skapa ett relaterat eller liknande inlägg med PHP &MySQL

Använda MySQL fulltextsökning MATCH (col1,col2,...) AGAINST (expr [search_modifier]) sak.

Låt oss säga att din tabell är articles och du måste hitta relaterade inlägg om titeln på det aktuella inlägget. Gör så här:

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

Detta ger dig de fem bästa relaterade inläggen.

Men kom först ihåg att aktivera fulltextsökning för tabellens kolumner genom att köra den här frågan:

ALTER TABLE articles ADD FULLTEXT (title, body);

[EDIT]:Varför inte använda LIKE : Förtydligande till OP:

Eftersom det inte ger korrekta resultat. Låt oss säga att din nuvarande titel är "Music of 1980" och att du vill ha relaterade inlägg om det. Nu, om du använder LIKE då kommer bara de inlägg som innehåller EXAKT ordsekvensen "Music of 1980" att dyka upp. Men om du använder MATCH ... AGAINST , då visas inlägg som innehåller Music OR 1980. Dessutom kommer inläggen som innehåller både musik och 1980 att visas på toppen eftersom det ger en SCORE till varje resultat och vi sorterar efter den poängen. Jag hoppas att det är tydligt.

[EDIT]:2 :

Om du har kategorier kan du lägga till AND Category = '$CurrentCategory' i SQL-frågan where clause för att få mer specifika resultat.

[EDIT]:3:OP kan inte använda fulltext :

Om du inte kan använda Full Text (av någon anledning) kan du bara visa 5 slumpmässiga inlägg från samma kategori. Eftersom de är i samma kategori är de åtminstone på något sätt relaterade:

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

Redigerad syntax:Ändrade LIMTI till LIMIT i MySQL-kod



  1. SQL - Hur lagrar och navigerar man i hierarkier?

  2. Hur man låter silverlight hämta sina data från MySQL

  3. Uppdatera mysql-tabellen med data från en annan tabell

  4. Uppdaterar kolumnen så att den innehåller radpositionen