Concat () в MySQL запрос и полный текст - PullRequest
1 голос
/ 22 декабря 2010

Синтаксис убивает меня! следующий запрос имеет проблемы:

$cadbusca="SELECT * , MATCH (nombre, apellido, email, about, place, CONCAT(nombre,' ',apellido)) AGAINST ('$busqueda') AS Score FROM user WHERE MATCH (nombre, apellido, email, about, place, CONCAT(nombre,' ',apellido)) AGAINST ('$busqueda') ORDER BY Score DESC";

Ошибка:

Запрос не выполнен: в синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать около '(nombre,' ',apellido)) AGAINST ('dan stern') AS Score FROM user WHERE MATCH (nom' в строке 1.

"дан стерн" слова, которые искали ...

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Вам нужно будет создать столбец, который похож на команду concat, которую вы хотите, и индексировать ее.(Как отметил Ридсио).Кроме того, если у вас есть совпадение в предложении where, вам не нужно делать 'ORDER BY', поскольку он автоматически сортирует его для вас.

http://www.devarticles.com/c/a/MySQL/Getting-Started-With-MySQLs-Full-Text-Search-Capabilities/2/

2 голосов
/ 22 декабря 2010

Чтобы выполнить полнотекстовый поиск с использованием MATCH/AGAINST, у вас должен быть полнотекстовый индекс для полей, по которым вы хотите выполнить поиск. См. совпадение / против документа .

Сказав это, вы пытаетесь включить динамическую сущность CONCAT(nombre,' ',apellido) в свой MATCH, что недопустимо - у вас не может быть индекса в таком динамическом поле.

Из документа Полнотекстовые ограничения doc :

Список столбцов MATCH () должен совпадать точно список столбцов в некоторых Определение индекса FULLTEXT для таблица, если этот MATCH () не является IN БУЛЕВЫЙ РЕЖИМ. Поиск в булевом режиме может быть сделано на неиндексированных столбцах, хотя они могут быть медленными.

...