使用MATCH AGAINST选择单个找到的结果

时间:2010-12-06 17:40:32

标签: php mysql match against

我试图从表格行中获得单个结果

我正在使用此查询

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

如果在任何字段中找到$busqueda,这显然会选择该行的所有字段。

有没有办法只选择找到搜索词的字段?

1 个答案:

答案 0 :(得分:1)

MATCH(nombre, mat1, mat2, mat3, mat4, mat5, mat6, mat7)充当单个索引字段,因此当某些文本与之匹配时,它无法告诉您哪个位。

您仍然可以匹配完整点差以获得匹配速度,并对字段列表中的每个字段使用单独的MATCH()次调用(在SELECT之后代替* })检查某个级别的相关性,以便检测哪个字段匹配。

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并不是绝对的要求。