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

MySQL-正確な関連性のある検索結果を取得する方法

    次のような文字列関数を使用できます:

    select id, name
    from subjects
    where name like concat('%', @search, '%')
    order by 
      name like concat(@search, '%') desc,
      ifnull(nullif(instr(name, concat(' ', @search)), 0), 99999),
      ifnull(nullif(instr(name, @search), 0), 99999),
      name;
    

    これにより、@searchを含むすべてのエントリが取得されます。最初にそれを持っているもの、次に空白の後にそれを持っているもの、次に出現の位置、そしてアルファベット順。

    name like concat(@search, '%') desc ちなみに、MySQLのブール論理を使用しています。 1 =true、0 =falseなので、この降順で並べ替えると、最初にtrueになります。

    SQLフィドル: http://sqlfiddle.com/#!9/c6321a/1 >



    1. java.lang.IllegalArgumentExceptionが発生するのはなぜですか。この場合、インデックス1のバインド値はnullです。

    2. Oracle11gまたは12cでテーブル/列/インデックス名のサイズを変更します

    3. ERRO1215。MySqlInnoDB

    4. お気に入りのパフォーマンスチューニングのトリック