【问题标题】:PHP/MySQL Search not returning ALL resultsPHP/MySQL 搜索不返回所有结果
【发布时间】:2012-07-10 17:34:12
【问题描述】:

所以我有一个表格,可以搜索公司列表以查看该特定公司是否已在网站上注册。

当公司名称为三个或更少字符并且我可以看到它在数据库中时,结果不会显示。

例如,如果公司名称是“ABB Eutech”并且搜索的是 ABB,则搜索返回 0。

但是,如果您搜索 Eutech,则搜索会返回结果。

这是我正在使用的代码:

    <?php 
        $out = '';
        if ((isset($_POST['companysearch-name'])) && ($_POST['companysearch-name']==NULL)) {
            $out .= '<h3>No matches. Please enter a company name.</h3>';
        } else if (isset($_POST['companysearch-name'])) {
            $queryString = htmlspecialchars($_POST['companysearch-name'],ENT_QUOTES);                   
            if(strlen($queryString) >0) {
                $query = $wpdb->get_results("SELECT DISTINCT (company_name) FROM wp_companies WHERE MATCH (company_name) AGAINST ('$queryString')");
                $searchStr = "%" . $queryString . "%";
                $searchStr = str_replace(" ","%",$searchStr);
                $numresults = count($query);
                if($query) {
                    $out .= '<div><ul>';
                    foreach($query as $result):

                    $out .= '<li>'.$result->company_name.'</li>';
                    endforeach;
                    $out .= '</ul></div>';
                    $out .= "<p>Is your company on this list? If YES, your company already has the scheme in place and you can setup a donation right now.</p>";
                    $out .= '<a class="button" href="/donate/"><span>Start Giving</span><b></b></a>';
                } else {
                    $out .= '<h3>No matches found.</h3>';
                    $out .= "<p>Can't find your employer? They may have only just signed up - <a href='/contact-us/'>contact us</a> and we'll check it out for you.</p>";
                }
            }
        }
    ?>

任何帮助都得到了极大的帮助! ...温柔点,我是第一次。

【问题讨论】:

  • 您可以更改数据库的配置,也可以使用where company_name LIKE %$queryString%,但可能会更慢

标签: php mysql


【解决方案1】:

默认情况下,MySQL 中的全文索引会省略包含三个或更少字符的单词。

要索引的单词的最小和最大长度由下式定义 ft_min_word_len 和 ft_max_word_len 系统变量。 (见第 5.1.3,“服务器系统变量”。)默认最小值是四个字符;默认最大值取决于版本。如果你改变 无论是哪个值,您都必须重建 FULLTEXT 索引。例如,如果 您希望三字符词可搜索,您可以设置 ft_min_word_len 变量,将以下几行放入选项中 文件:[mysqld] ft_min_word_len=3

然后重新启动服务器并重建 FULLTEXT 索引。笔记 特别是说明中关于 myisamchk 的评论 关注此列表。

http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html

【讨论】:

  • 感谢rawb的回复。我现在的问题是该站点位于共享主机包上,因此我无权访问 MySQL 设置。还是我?我是一名前端设计师,所以冒险进入这个后端领域正在破坏我的鼻窦......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 2013-06-26
  • 2019-12-05
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多