2010-12-06 5 views
2

戦で単一た結果を選択して、私は$busqueda場合、これは明らかに、行のすべてのフィールドを選択し、このクエリに私はテーブルの行から</p> <p>を単一の結果を取得しようとしています

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

を使用していますいずれかの分野に存在する。

検索語句があるフィールドだけを選択する方法はありますか?

+0

$ busqueda = "'"; < - エラーが発生すると、クエリーをダンプする可能性があります。もしそうなら、私はテーブル名を持っています。その後、次回は$ busqueda = "');テーブルを削除する[テーブル名]; - "; //あなたはこれらのようなSQLインジェクションのためにスクラブしていると思いますか? – DampeS8N

答えて

1

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

あなたはまだこのようにマッチングの速度をフルスプレッド照合、および(*の代わりにSELECT後)フィールドリスト内の各フィールドに対して個別MATCH()のコールを使用することができるために、一定のレベルのための関連性をチェックしますどのフィールドが一致したかを検出する。

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を使用することは絶対条件ではありません。

関連する問題

 関連する問題