Выберите один найденный результат с 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 ответ
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
если я правильно помню.