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

Mysql、PHP、複数の単語を検索

    これを行うには2つの方法があります。 1つ目は、かなり明白なアプローチです。 $necessaryWordsという配列に表示する必要のあるすべての単語があるとします。

    $sql = 'SELECT ... FROM ...'; // and so on
    $sql .= ' WHERE 1';
    
    foreach ($necessaryWords as $word)
        $sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string
    

    ただし、%foo%を使用する インデックスを使用できないため、かなり低速です。このクエリにより、巨大なテーブルや必要な単語の数が多い場合にパフォーマンスの問題が発生する可能性があります。

    もう1つのアプローチは、FULLTEXTです。 subjectのインデックス およびbody 。フルテキストのMATCH IN BOOLEAN MODEを使用できます このように:

    $sql = 'SELECT ... FROM ...'; // and so on
    $sql .= ' WHERE MATCH(subject,body) AGAINST("';
    
    foreach ($necessaryWords as $word)
        $sql .= ' +' . $word;
    $sql .= '")';
    

    テーブルではMyISAMを使用する必要があることに注意してください FULLTEXTを使用するには インデックス。 更新:MySQL5.6以降InnoDB FULLTEXTをサポート インデックスも。私はこれがパフォーマンスの面でより良い選択かもしれないと思います。ブールモードでの全文に関する詳細なドキュメントは、にあります。マニュアル



    1. STRING_ESCAPE()関数がSQL Server(T-SQL)でどのように機能するか

    2. AMDEPYC7002シリーズプロセッサとSQLServer

    3. MySQLでフロートを選択する

    4. PHPを使用してHTMLコードをDBに挿入する方法