複数のバインドされたパラメータを使用したMySQLUTF-8全文検索

user3022527

私のクエリは次のように表示されます。

SELECT advert_id
FROM oop_adverts
WHERE cat_down = :id 
  AND province = :province
  AND MATCH (location) AGAINST (:location);

実際には:

SELECT advert_id 
FROM oop_adverts 
WHERE cat_down = 3 
  AND province = 5 
  AND MATCH (location) AGAINST ('Krakow');

そして、このクエリを試してみると、mysqlは最終的に0の結果を取得します。問題は、クエリのフレーズを磨くことです。このクエリを次のように置き換えたとき:

SELECT advert_id 
FROM oop_adverts 
WHERE cat_down = 3
    AND province = 5 
    AND MATCH (location) AGAINST ('Krakow') COLLATE utf8_unicode_ci;`

私が得た:

Syntax error or access violation: 1253 COLLATION 'utf8_unicode_ci' is not valid for CHARACTER SET 'binary''

スクリプトphpとmysqlでどの照合順序を使用すべきかわかりません。手伝って頂けますか?

PS。私の「最高の英語」の仲間に申し訳ありません。

Gadoma

コメントの議論に従って編集:

テーブルスキームは(utf8に関して)問題なく見え、O​​Pで指定した最初のコード例は正しい(照合なしのもの)ので、適切なDB照合と接続自体もあると仮定します-おそらくあなたは行の50%以上でadvert_locationのクラクフ。これが0行の結果を取得する理由です。

全文検索を使用する場合は、テーブルの全文インデックスにデータ行の50%に表示されるキーワードが含まれている場合、そのキーワードは一致クエリによって無視されることを常に覚えておく必要があります

したがって、代わりに、ブールモードでFull Text Serachを使用して、50%のしきい値をバイパスできます。こちらのドキュメントを確認してくださいMySQLブール全文検索

したがって、たとえば、advert_locationとしてKraków、Krakow、およびWarszawaを含むテーブルに3行がある場合、次のクエリは0行の結果を返します。

SELECT advert_id 
FROM oop_adverts 
WHERE MATCH(`advert_location`) AGAINST ('Kraków')

ただし、ブールモードを使用すると、2行の結果が得られます。

SELECT advert_id 
FROM oop_adverts 
WHERE MATCH(`advert_location`) AGAINST ('Kraków' IN BOOLEAN MODE)

複数の単語を照合する場合は、「+」演算子を使用できます(詳細については、上記のリンク先のドキュメントを参照してください)。

SELECT advert_id 
FROM oop_adverts 
WHERE MATCH(`advert_location`,`advert_title`) AGAINST ('+Kraków' '+Search phrase' IN BOOLEAN MODE)

注意点として、「+」演算子が含まれているバインドされたパラメーターを作成することを忘れないでください。たとえば、PHPを使用している場合は、次のように実行できます。

$query= "SELECT advert_id 
        FROM oop_adverts 
        WHERE MATCH(`advert_location`,`advert_title`) AGAINST (:location :title IN BOOLEAN MODE)";

$SQL=$db->prepare($query);                          
$SQL->bindValue(':location', '+'.$searched_location, PDO::PARAM_STR);
$SQL->bindValue(':title', '+'.$searched_title, PDO::PARAM_STR);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

全文検索の予測/修正

分類Dev

Fossilでの全文検索

分類Dev

jsonでのPostgres全文検索

分類Dev

Django RestFrameworkでの全文検索

分類Dev

PostgreSQL全文検索の略語

分類Dev

Elasticsearchでのphp全文検索

分類Dev

SQLの全文検索条件

分類Dev

And演算子を使用したSpringDataMongodb全文検索

分類Dev

CONTAINSを使用した全文検索

分類Dev

TypeOrmを使用したPostgresql全文検索

分類Dev

PHPを使用したMongoDB全文検索

分類Dev

複数のパラメーターを使用したRubyonRails検索

分類Dev

複数の列を使用したSqlalchemy全文検索とpostgresqlでの部分検索

分類Dev

複数の単語を使用したDjango全文検索

分類Dev

複数の部分的な単語を使用した全文検索

分類Dev

MYSQLで複数のパラメータを使用したワイルドカード検索?

分類Dev

複数の検索用語を複数の列で全文検索

分類Dev

NULLパラメータを使用したSQLServer全文検索-パフォーマンスヒット

分類Dev

Mongooseを使用したノードJSでの全文検索

分類Dev

Mongooseを使用したノードJSでの全文検索

分類Dev

InnoDBエラーでのMySQL全文検索

分類Dev

高速全文検索のデータ構造

分類Dev

JSONデータのMySQL全文検索

分類Dev

複数のパラメータを使用したデータベース検索

分類Dev

PostgreSQL全文検索スペイン語文字Ñ

分類Dev

SQLServer全文検索空のカタログ

分類Dev

Pymongo全文検索の使用方法

分類Dev

「全文検索」にRethinkDBを使用する

分類Dev

Sqlite全文検索クエリパズル

Related 関連記事

ホットタグ

アーカイブ