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

mysqlは文字列上の完全な単語または単語の先頭に一致するのが好きです

    質問ですでに述べたように、クエリ

    $query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
                                    . 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'
    

    SEARCHFIELDが一致するレコードに対して機能します $searchTextで始まる(または等しい)単語が含まれています

    パフォーマンスに関しては、開発マシンでテストを行いましたMBP 2,2 GHz i7 quad core

    4.000レコードで単語を検索するには、約40ミリ秒かかります。

    通常、レコードにはインデックスが付けられます(フルテキストはありません)。

    私は数千のレコードを持っていて、クエリはあまり実行されないので、私にとっては良いことです。
    このソリューションは、他のコンテキストには適していない可能性があります。

    上記のクエリでプリペアドステートメントを作成するために、ここで説明する手法を使用しました:

    MySQLワイルドカードのエスケープ

    結果のコードは次のとおりです。

    function like($s, $e)
    {
        return str_replace(array($e, '_', '%'), array($e . $e, $e . '_', $e . '%'), $s);
    }
    
    /* ... */
    
    /* create a prepared statement */
    $stmt = $mysqli->prepare(
        'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE ? ESCAPE "=" OR SEARCHFIELD LIKE ? ESCAPE "="'
    ); 
    
    if( $stmt )
    {
        /* escape the text */
        $escSearchText = like( $searchText, "=" );
    
        /* 'like' parameters */
        $like1 = $escSearchText . "%";
        $like2 = "%" . $escSearchText . "%";
    
        /* bind parameters for markers */
        $stmt->bind_param( "ss", $like1, $like2 );
    
    /* ... */
    


    1. JDBCで開いている接続をプログラムでチェックする

    2. SQLServerおよびMySQLで実行可能なテーブルの最大数

    3. Ubuntu20.04にNeo4jをインストールする方法

    4. MariaDBでREGEXP_REPLACEを使用した正規表現の検索と置換の正しい構文は何ですか?