2

テーブル行から単一の結果を取得しようとしています

このクエリを使用しています

"SELECT * FROM $tableName WHERE MATCH(nombre, mat1, mat2, mat3, mat4, mat5, mat6, mat7) 
AGAINST ('$busqueda' IN BOOLEAN MODE) 
ORDER BY nombre";

$busquedaいずれかのフィールドで が見つかった場合、これは明らかに行のすべてのフィールドを選択します。

検索語が見つかったフィールドのみを選択する方法はありますか?

4

1 に答える 1

1

MATCH(nombre, mat1, mat2, mat3, mat4, mat5, mat6, mat7)単一のインデックス フィールドとして機能するため、一部のテキストがそれに一致する場合、どのビットかを通知する機能がありません。

このように、一致の速度を向上させるために完全なスプレッドと照合MATCH()し、フィールド リストの各フィールドに対して個別の呼び出しを使用して ( SELECTin の代わりに*)、特定のレベルの関連性をチェックして、どのフィールドが一致したかを検出することができます。

SELECT
   IF(MATCH(nombre) AGAINST ('search phrase' IN BOOLEAN MODE) > 0.9, nombre, NULL) AS nombre,
   IF(MATCH(mat1) AGAINST ('search phrase' IN BOOLEAN MODE) > 0.9, mat1, NULL) AS mat1
   /* etc */
FROM myTable
WHERE MATCH(nombre, mat1, mat2, mat3, mat4, mat5, mat6, mat7) 
      AGAINST ('search phrase' IN BOOLEAN MODE) 
ORDER BY nombre

一致しないフィールドには NULL が返されますFULLTEXT。個々のフィールドにもインデックスが必要な場合があることに注意してください。BOOLEAN MODE私の記憶が正しければ使用する場合、それは絶対的な要件ではありません。

于 2010-12-06T18:43:50.280 に答える