mysql匹配〜例子

时间:2012-02-23 09:51:56

标签: php mysql search

下面是一个我坚持使用的sql示例,它不会返回名为“mill hotel”的酒店 它返回10个其他酒店。任何帮助都会非常感谢


SELECT * FROM tbl WHERE match(hotel) against('the mill hotel' IN BOOLEAN MODE) LIMIT 10";

5 个答案:

答案 0 :(得分:8)

您需要指定运算符,因为未在OR运算中指定任何结果。试试这个:

SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";

Read more

答案 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匹配,millhotel是可选的:如果您想要整个短语,则需要在引号中:

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