下面是一个我坚持使用的sql示例,它不会返回名为“mill hotel”的酒店 它返回10个其他酒店。任何帮助都会非常感谢
SELECT * FROM tbl WHERE match(hotel) against('the mill hotel' IN BOOLEAN MODE) LIMIT 10";
答案 0 :(得分:8)
您需要指定运算符,因为未在OR运算中指定任何结果。试试这个:
SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";
答案 1 :(得分:4)
您始终可以使用引号来匹配词组mill hotel
,而不是词mill
和/或hotel
:
SELECT * FROM tbl WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE) LIMIT 10;
或者,简单地说:
SELECT * FROM tbl WHERE match(hotel) against('"mill hotel"' IN BOOLEAN MODE) LIMIT 10;
我相信所有
SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10;
确实要求the
匹配,mill
和hotel
是可选的:如果您想要整个短语,则需要在引号中:
SELECT * FROM tbl WHERE match(hotel) against('+"the mill hotel"' IN BOOLEAN MODE) LIMIT 10;
虽然当你只有一个搜索短语时,如本例所示,加号是多余的。
答案 2 :(得分:0)
在这种情况下使用+ (plus)
......
SELECT * FROM tbl WHERE match(hotel) against ('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";
阅读 this 了解详细信息。
答案 3 :(得分:0)
12.9.2布尔全文搜索
MySQL可以使用IN BOOLEAN MODE修饰符执行布尔全文搜索。
布尔全文搜索具有以下特征:
12.9.1自然语言全文搜索
默认情况下或使用IN NATURAL LANGUAGE MODE修饰符,MATCH()函数对文本集合执行字符串的自然语言搜索。集合是FULLTEXT索引中包含的一个或多个列的集合。搜索字符串作为AGAINST()的参数给出。对于表中的每一行,MATCH()返回一个相关值;也就是说,搜索字符串与MATCH()列表中命名的列中该行中的文本之间的相似性度量。
因此,您需要对结果进行排序或删除结果限制。
答案 4 :(得分:0)
要基于PHP中的短语执行以下mysql查询
SELECT *
FROM tbl
WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE)
您必须这样做:
$phrase = "the mill hotel";
$phrase= '"'.$phrase.'"'; // Adds quotes around string
$stmt = $db->prepare('SELECT * FROM tbl WHERE MATCH(hotel) AGAINST(:phrase )');
$stmt->bindParam(':phrase ', $phrase , PDO::PARAM_STR);
$stmt->execute();
感谢@ ub3rst4r的回答:Force exact string MATCH for PDO prepared statements