mysql - MATCH (field1, field2) 和 MATCH(field1) OR MATCH(field2) 之间的区别

标签 mysql full-text-search

以下两个查询的结果有差异吗?

SELECT *
FROM table1, table2
WHERE
    ( MATCH(table1.row1) AGAINST('searchstring' IN BOOLEAN MODE) )
    OR
    ( MATCH(table2.row2) AGAINST('searchstring' IN BOOLEAN MODE) )


SELECT *
FROM table1, table2
WHERE
    ( MATCH(table1.row1, table2.row2) AGAINST('searchstring' IN BOOLEAN MODE) )

我更喜欢第一种方法,因为这使我更容易实现每个字段的排名标准。

最佳答案

是的,第二个查询有错误。

MATCH() 函数的参数必须是定义了一个全文索引的所有列。

但是不能在多个表上定义索引。因此,像 MATCH(table1.row1, table2.row2) 这样的表达式无法工作,因为它引用了两个不同表中的列。

<小时/>

如果您仅引用同一个表中的列,则可以将多个列放入 MATCH() 函数中。事实上,如果全文索引是在多个列上定义的,那么这是强制的。请注意,上面我说过函数的参数必须是全文索引的所有列。

关于mysql - MATCH (field1, field2) 和 MATCH(field1) OR MATCH(field2) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813263/

相关文章:

mysql - Magento #1005 - 无法创建表 '...'(错误号 : 121) ERROR

mysql - 禁用 innodb 对 MySQL 的支持

mysql - 如何在 MariaDB/MySQL 中转义字符串以进行全文搜索

mysql - 在 VIEW 上创建全文索引

database - 全文搜索入门?

mysql - 子查询上的 NHibernate INNER JOIN

mysql - SQL-模式匹配无输出

mySQL全文搜索问题

mysql - 全文搜索工作针对艺术家而不是标题

mysql - 如何将 jcalendarcombo 日期与默认的 Mysql 日期格式相匹配