1

语法要了我的命!下一个查询有问题:

$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 行附近使用正确的语法。

“dan stern”是搜索的词...

4

2 回答 2

2

要使用 执行全文搜索MATCH/AGAINST,您必须在要进行搜索的字段上有一个全文索引。请参阅匹配/反对文档

话虽如此,您正试图在CONCAT(nombre,' ',apellido)您的 中包含一个动态实体 , ,MATCH这是不允许的 - 您不能在这样的动态字段上拥有索引。

来自全文限制文档

MATCH() 列列表必须与表的某些 FULLTEXT 索引定义中的列列表完全匹配,除非此 MATCH() 处于布尔模式。布尔模式搜索可以在非索引列上完成,尽管它们可能很慢。

于 2010-12-21T21:50:58.017 回答
2

您需要创建一个类似于您想要的 concat 命令的列并对其进行索引。(如 Riedsio 所述)。此外,如果您的 where 子句中有匹配项,则不需要执行“ORDER BY”,因为它会自动为您排序。

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

于 2010-12-21T21:53:58.027 回答