1

構文は私を殺しています!次のクエリに問題があります。

$cadbusca="SELECT * , MATCH (nombre, apellido, email, about, place, CONCAT(nombre,' ',apellido)) AGAINST ('$busqueda') AS Score FROM user WHERE MATCH (nombre, apellido, email, about, place, CONCAT(nombre,' ',apellido)) AGAINST ('$busqueda') ORDER BY Score DESC";

エラー:

クエリに失敗しました:SQL構文にエラーがあります。1行目付近'(nombre,' ',apellido)) AGAINST ('dan stern') AS Score FROM user WHERE MATCH (nom'で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

「danstern」は検索された単語です...

4

2 に答える 2

2

を使用して全文検索を実行するMATCH/AGAINSTには、検索対象のフィールドに全文索引が必要です。マッチ/アゲインスト docを参照してください。

そうは言っても、動的エンティティ を に含めようとしていCONCAT(nombre,' ',apellido)ますMATCHが、これは許可されていません。そのような動的フィールドにインデックスを設定することはできません。

全文制限ドキュメントから:

MATCH() 列リストは、この MATCH() が IN BOOLEAN MODE でない限り、テーブルの一部の FULLTEXT インデックス定義の列リストと正確に一致する必要があります。低速になる可能性がありますが、ブール モードの検索は、インデックスが設定されていない列に対して実行できます。

于 2010-12-21T21:50:58.017 に答える
2

必要な concat コマンドのような列を作成し、それに対してインデックスを作成する必要があります。(Riedsioが指摘したように)。また、where 句に一致するものがある場合は、自動的に並べ替えられるため、「ORDER BY」を実行する必要はありません。

http://www.devarticles.com/c/a/MySQL/Getting-Started-With-MySQLs-Full-Text-Search-Capabilities/2/

于 2010-12-21T21:53:58.027 に答える