尝试使用MySQL的MATCH AGAINST全文搜索,其中我的搜索词由jQueryUIs自动完成小部件提供为$_GET['term']
。此外,我希望使用PHP的PDO来逃避这个术语。最后,我想使用通配符,但是,如果在提供的术语中对每个单词使用通配符太多,我可以将它应用到术语中的最后一个单词。我的尝试如下,适用的表格式如下。问题是,当在术语中仅提供部分单词时,它不会返回任何记录。有什么建议?谢谢
public function searchHelp()
{
header('Content-Type: application/json');
$this->dontCache();
try
{
$sql ='SELECT id,name AS value FROM topics WHERE MATCH(keywords,name,content) AGAINST(? IN NATURAL LANGUAGE MODE)';
$stmt = dbHelp::db()->prepare($sql);
$stmt->execute(array($_GET['term'].'*'));
echo(json_encode($stmt->fetchAll(PDO::FETCH_ASSOC)));
}
catch(PDOException $e){library::sql_error($e,$sql);}
}
CREATE TABLE `topics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`topics_id` int(11) NOT NULL,
`name` varchar(45) NOT NULL,
`content` text,
`list_order` tinyint(4) NOT NULL DEFAULT '0',
`keywords` text,
`display_list` tinyint(4) DEFAULT '1',
PRIMARY KEY (`id`),
KEY `fk_topics_topics` (`topics_id`),
FULLTEXT KEY `name` (`keywords`,`name`,`content`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;