首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php mysql与无结果匹配

问php mysql与无结果匹配
EN

Stack Overflow用户
提问于 2011-12-27 05:53:56
回答 2查看 2.9K关注 0票数 6

好了,我正在尝试对我的mysql表进行全文搜索。下面是查询

代码语言:javascript
复制
SELECT *,
       MATCH (title, joke) AGAINST ('welcome') AS relevance,
       MATCH (title) AGAINST ('welcome') AS title_relevance
FROM jokes
WHERE MATCH (title, joke) AGAINST ('welcome') 
AND flags < 5
ORDER BY title_relevance + relevance + ups DESC, downs ASC LIMIT 0, 30

这是我的桌子

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `jokes` (
  `jid` varchar(24) NOT NULL,
  `uid` int(11) NOT NULL,
  `title` mediumtext NOT NULL,
  `joke` longtext NOT NULL,
  `ups` int(11) NOT NULL DEFAULT '0',
  `downs` int(11) NOT NULL DEFAULT '0',
  `flags` int(11) NOT NULL DEFAULT '0',
  `createddate` int(11) NOT NULL,
  `editdate` int(11) NOT NULL,
  PRIMARY KEY (`jid`),
  FULLTEXT KEY `searcher` (`title`,`joke`),
  FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

我有几行在标题或笑话中包含欢迎,但似乎没有得到任何结果。我搜索什么词都无关紧要。

我还尝试过删除、flags < 5和ups DESC, downs ASC LIMIT 0,30

这两种方法似乎都不起作用。

这就是我对php代码所做的事情。

代码语言:javascript
复制
if($st->prepare($SearchQuery))
{
    if(!$st->execute())
        ChromePhp::log("Execute Error: " . $st->error);
    else
    {
        $results = fetchAll($st);
        $ret = new stdClass();
        $ret->TotalCount = 0;
        $ret->Results = $results;
        return $ret;
    }
}

这就是fetchAll(它适用于我遇到的所有其他查询)。

代码语言:javascript
复制
function fetchAll($result)
    {    
        $array = array();

        if($result instanceof mysqli_stmt)
        {
            $result->store_result();

            $variables = array();
            $data = array();
            $meta = $result->result_metadata();

            while($field = $meta->fetch_field())
                $variables[] = &$data[$field->name]; // pass by reference

            call_user_func_array(array($result, 'bind_result'), $variables);

            $i=0;
            while($result->fetch())
            {
                $array[$i] = array();
                foreach($data as $k=>$v)
                    $array[$i][$k] = $v;
                $i++;

                // don't know why, but when I tried $array[] = $data, I got the same one result in all rows
            }
        }
        elseif($result instanceof mysqli_result)
        {
            while($row = $result->fetch_assoc())
                $array[] = $row;
        }

        return $array;
    }

有人知道我做错了什么吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-29 01:10:49

因为欢迎‘’是一个STOPWORD,所以MySQL会跳过搜索这个单词。

查看MySQL全文搜索的停用词列表

http://dev.mysql.com/doc/refman/5.5/en/fulltext-stopwords.html

并且请提醒搜索短语中的单词长度,如果它的长度小于4,默认情况下MySQL也会跳过搜索。

例如“我的方式”、“美国”、"php“、"job”等(了解更多关于ft_min_word_len的信息)

票数 2
EN

Stack Overflow用户

发布于 2011-12-29 14:03:53

我不太确定这是否会有很大的不同,但你有没有尝试过使用布尔模式?如下所示:

代码语言:javascript
复制
AGAINST ('welcome' IN BOOLEAN MODE)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8639364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档