以下两个查询的结果有差异吗?
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/