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

mysqlの複数のフィールドに対して加重検索を行うための最良の方法は?

    おそらく、加重検索/結果を実行するこのアプローチはあなたに適しています:

    SELECT *,
        IF(
                `name` LIKE "searchterm%",  20, 
             IF(`name` LIKE "%searchterm%", 10, 0)
          )
          + IF(`description` LIKE "%searchterm%", 5,  0)
          + IF(`url`         LIKE "%searchterm%", 1,  0)
        AS `weight`
    FROM `myTable`
    WHERE (
        `name` LIKE "%searchterm%" 
        OR `description` LIKE "%searchterm%"
        OR `url`         LIKE "%searchterm%"
    )
    ORDER BY `weight` DESC
    LIMIT 20
    

    selectサブクエリを使用して、結果を並べ替えるための重みを提供します。この場合、3つのフィールドが検索され、フィールドごとの重みを指定できます。おそらくユニオンよりも安価であり、プレーンなMySQLのみでより高速な方法の1つです。

    より多くのデータがあり、より迅速な結果が必要な場合は、SphinxやLuceneなどの使用を検討できます。



    1. mysqlテーブルでIDを作成しますauto_increment(事後)

    2. LIKEを使用してGROUP_CONCATを検索します

    3. 別のテーブルと一致するテーブルをMySQLで作成しますか?

    4. 単一のクエリ(再帰クエリ)でmysqlテーブル内のすべての親を検索する