MySQL全文検索の使用MATCH (col1,col2,...) AGAINST (expr [search_modifier])
事。
テーブルがarticles
であるとしましょう 現在の投稿のタイトルに関連する投稿を見つける必要があります。このようにしてください:
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
これにより、関連する上位5つの投稿が表示されます。
ただし、最初に、次のクエリを実行して、そのテーブルの列の全文検索を有効にすることを忘れないでください。
ALTER TABLE articles ADD FULLTEXT (title, body);
[編集]: LIKE
を使用しない理由 : OPの明確化:
正しい結果が得られないからです。現在のタイトルが「Musicof1980」で、それに関連する投稿が必要だとします。ここで、LIKE
を使用する場合 そうすると、「Musicof1980」という単語のシーケンスを正確に含む投稿のみが表示されます。ただし、MATCH ... AGAINST
を使用する場合 、その後、MusicOR1980を含む投稿が表示されます。また、音楽と1980の両方を含む投稿は、SCORE
を提供するため、トップに表示されます。 それぞれの結果に応じて、そのスコアで並べ替えています。それが明確であることを願っています。
[編集]:2 :
カテゴリがある場合は、AND Category = '$CurrentCategory'
を追加できます SQLクエリのwhere clause
より具体的な結果を得るには。
[編集]:3:OPは全文を使用できません :
フルテキストを使用できない場合(何らかの理由で)、同じカテゴリのランダムな投稿を5つだけ表示できます。それらは同じカテゴリに属しているため、少なくとも何らかの形で関連しています:
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
編集された構文:MySQLコードでLIMTIをLIMITに変更