【问题标题】:Concat() in mysql query and full textmysql查询和全文中的concat()
【发布时间】:2011-05-29 02:16:14
【问题描述】:

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

$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 服务器版本相对应的手册,以在第 1 行的 '(nombre,' ',apellido)) AGAINST ('dan stern') AS Score FROM user WHERE MATCH (nom' 附近使用正确的语法。

"dan stern" 是搜索的词...

【问题讨论】:

  • 我真的不知道怎么回事,但我认为这是你使用 MATCH 和 AGAINST 的方式

标签: sql mysql full-text-search mysql-error-1064 concat


【解决方案1】:

要使用MATCH/AGAINST 执行全文搜索,您必须在要执行搜索的字段上有一个全文索引。见match/against doc

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

来自Full-Text Restrictions doc

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

【讨论】:

  • 因此连接两个列的唯一方法是进行布尔模式搜索?
  • 不——那时你显然做不到。如果可以的话,贾斯汀建议创建一个您想要的串联列是一个很好的方法。或者,您是否考虑过仅将 LIKE 运算符与通配符一起使用? -- dev.mysql.com/doc/refman/5.0/en/…
  • 这就是我最终所做的......但是,这么多喜欢的结果会变慢。谢谢帮助
【解决方案2】:

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

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

【讨论】:

  • 这在选择列表中是不可能的。仅在 FROM 之后。
猜你喜欢
  • 2011-05-29
  • 2015-12-24
  • 2011-09-01
  • 2013-05-16
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多