我刚学习MySQL中的MATCH .. AGAINST
,并且意图使用它,因为我了解它的基础知识。我遇到了一些遗留代码,希望得到一些反馈。这是:
foreach( $validSearchWords as $word ) { //this is a cleaned array of the user query phrase
$mycount++;
// uses a special character
if (strpos($word,"'")) {
$wordCriteria['keyword'] .= '"'.$word.'"'; //really? can't be right!
// if only one search term
} elseif ($vcount == $mycount) {
$wordCriteria['keyword'] .= $word.'*';
// if term is second or higher
} else {
$wordCriteria['keyword'] .= $word.'* ';
}
}
我理解在这里尝试的是什么但我怀疑第一个逻辑块不正确。
Texas State University
将成为:Texas* State* University*
的 BUT
John O'Malley High School
将成为“John *”O'Malley“High * School *
这可能不对,我认为程序员的操作不正确,因为:
a)奥马利之后没有空间
b)他们因为单引号似乎很奇怪而失去了外卡。如果他们真的打算使用外卡那么它应该是这样的,对吗?John* O'Malley* High* School*
更新 更简洁的问题是,“你如何使用带有通配符的O'Malley单引号来表示单词?
此:
SET @keyword='O\'malley*';
SELECT * FROM all_schools WHERE match (school_name) against (@keyword IN BOOLEAN MODE);
只给我Malley
的结果,这是我不想要的。我希望O'Malley
和O'Malleygough
(如果存在)