2010-12-06 25 views
2

選擇單一的發現結果,我想從一個錶行得到一個結果與對陣

我使用這個查詢

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

這顯然選擇行如果$busqueda的所有字段被發現在任何領域。

有沒有辦法只選擇找到搜索字詞的字段?

+0

$ busqueda =「'」; < - 導致錯誤,可能會轉儲查詢。如果是這樣,我有表名。然後,下一次:$ busqueda =「'); drop table [table name]; - 」; //我假設你正在擦洗這些SQL注入? – DampeS8N 2010-12-06 18:25:59

回答

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 

空值將被退回不匹配,你很可能希望在各個領域FULLTEXT指標太,音符。如果我沒有記錯的話,使用BOOLEAN MODE並不是絕對的要求。