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

一致した単語の数を数える

    それがより良い方法かどうかはわかりませんが、これが私が行う方法です:

    SELECT d.id, d.word, LEFT(d.description, 100) description,
      COALESCE(sum(v.vote), 0) votecount,
        (CONCAT(word, description, `usage`) LIKE '%George%')
      + (CONCAT(word, description, `usage`) LIKE '%Tabuki%')
      + (CONCAT(word, description, `usage`) LIKE '%Street%')
      + (CONCAT(word, description, `usage`) LIKE '%Fighter%')
      + (CONCAT(word, description, `usage`) LIKE '%Miley%')
      + (CONCAT(word, description, `usage`) LIKE '%Cyrus%') `match`
    FROM definition d
    LEFT JOIN vote v ON v.definition_id = d.id
    GROUP BY d.id
    HAVING `match` > 0
    ORDER BY `match` DESC, votecount DESC
    

    文字列が十分に長い場合は、連結を繰り返すと、派生テーブルを作成するよりも時間がかかる可能性があります(可能性は低いですが、試してみる価値があります):

    SELECT id, word, description, votecount,
        (fullDesc LIKE '%George%')
      + (fullDesc LIKE '%Tabuki%')
      + (fullDesc LIKE '%Street%')
      + (fullDesc LIKE '%Fighter%')
      + (fullDesc LIKE '%Miley%')
      + (fullDesc LIKE '%Cyrus%') `match`
    FROM (
      SELECT d.id, d.word, LEFT(d.description, 100) description,
        COALESCE(sum(vote), 0) votecount, CONCAT(word, description, `usage`) fullDesc
      FROM definition d
      LEFT JOIN vote v ON v.definition_id = d.id
      GROUP BY d.id
    ) s
    HAVING `match` > 0
    ORDER BY `match` DESC, votecount DESC
    



    1. MySQL:グループでTIMEDIFF()をSUM()する方法は?

    2. MySQLで昨日の日付を取得する方法

    3. MSSQLServerでの忘れられたトランザクションの自動削除

    4. 20〜30の同時mysql接続により、RDSが80%を超えて急上昇します