我正在尝试在CodeIgniter中创建自己的博客 博客的一个关键功能是,您可以使用某些关键字搜索帖子。 必须在标题,内容,类别和/或关键字中找到这些关键字。
我还在处理我的数据库(例如将类别和关键字提取到单独的表格中),但这是我到目前为止所做的
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(10000) NOT NULL,
`date` date NOT NULL,
`keywords` varchar(255) NOT NULL,
`category` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `titel` (`title`),
FULLTEXT KEY `title` (`title`),
FULLTEXT KEY `content` (`content`),
FULLTEXT KEY `keywords` (`keywords`),
FULLTEXT KEY `category` (`category`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
我不确定内容列,可能应使用text
代替varchar(10000)
在我的表格中,我有2个帖子
ID | TITLE | CONTENT | DATA | KEYWORDS | CATEGORY
---+------------------------------+------------------+------------+----------------+----------------------
1 | Welcome to my website | A few paragraphs | 2014-02-09 | Welcome | Site
2 | All Windows Keyboard layouts | A few paragraphs | 2014-03-11 | A few keywords | Windows Deployment
我的查询如下,我试着保持现在尽可能简单
SELECT *
FROM `posts`
WHERE MATCH(`title`) AGAINST('Welcome');
我似乎无法弄清楚为什么phpMyAdmin不返回任何东西。
我还尝试了一个更复杂的查询,看它是否返回任何内容,没有任何运气
SELECT *, MATCH(`title`) AGAINST('Welcome') AS Relevance
FROM `posts`
WHERE MATCH(`title`) AGAINST('Welcome')
ORDER BY `Relevance` DESC
如果我理解正确,MATCH x AGAINST y
可以包含多个关键字
这就是我在寻找的东西。我希望能够在查询中添加几个关键字,并找到在标题,内容,关键字和类别中得分最高的帖子
答案 0 :(得分:1)
显然欢迎'在MySQL的default stopword list中。
您可以搜索其他内容以进行测试,如果您认为它不适用于您的情况,则可以更改禁用词列表。
另外,请查看this question。
答案 1 :(得分:0)
这就是你想要的:
SELECT *, MATCH(`title`) AGAINST('website' IN BOOLEAN MODE) AS Relevance
FROM `posts`
WHERE `title` LIKE '%website%'
ORDER BY `Relevance` DESC
答案 2 :(得分:-2)
试试这个:
SELECT *
FROM `posts`
WHERE MATCH(`title`) AGAINST('website' IN BOOLEAN MODE);
欢迎看起来像是mysql中的一个停用词,你必须使用LIKE语句。
SELECT *
FROM `posts`
WHERE MATCH(`title`) AGAINST('website' IN BOOLEAN MODE)
OR title LIKE '%Welcome%'