sql >> データベース >  >> RDS >> Mysql

PHPとMySQLを使用して関連または類似の投稿を作成する

    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に変更



    1. MySQLUNION句

    2. GoogleマップはPHPを使用してMySQLでポリゴンとポイントを保存します

    3. 1つのSQLクエリでOracle11gがより多くのCPUを消費するように強制できないのはなぜですか

    4. 合計に達するまで選択する方法