【问题标题】:MYSQL / PHP Search not finding all records in DatabaseMYSQL / PHP搜索未找到数据库中的所有记录
【发布时间】:2013-04-04 07:31:11
【问题描述】:

我真的一直在用这个来敲打我的头,我需要一些帮助。我有一个不到 900 条记录的 MYSQL 数据库。我必须跨多个列进行全文搜索,但它似乎不起作用。当我搜索“LName”字段时,它会显示一些记录,例如,如果我搜索“Smith”,当数据库包含 8 行时,它会返回 7 行。当我搜索单个姓氏“Albritton”时,它不会当我知道它存在时,根本找不到它。这适用于数据库中的许多记录。你搜索,它似乎不存在,即使我知道它存在。

我正在执行 SELECT / FROM / WHERE / OR 来搜索 Lname、Fname、City、State 等,但它只会搜索 LNAME,但它仍然只会返回部分结果。

在网上搜索了几个小时后,我决定在表上创建一个索引并进行搜索索引 WHERE MATCH 搜索,这很有效,但我仍然得到同样有限的结果。我正在使用 PHPMYADMIN 并运行了分析和修复,但它说它很好并且没有任何改变。

根据我所读到的,对于这么小的表,我最好根本不使用索引,我对此很好,但似乎两者都不能正常工作。

此外,我创建的所有索引的基数都是“1”,这似乎不正确。

我将在此处粘贴我的 search.PHP。请原谅乱七八糟的东西,我整晚都在尝试。任何帮助表示赞赏。

/* $result = mysql_query ("SELECT * FROM attorney WHERE lname LIKE '%$keyword%'
OR
fname LIKE '%$keyword%'
OR
phone LIKE '%$keyword%'
OR
bizname LIKE '%$keyword%'
OR
address LIKE '%$keyword%'
OR
city LIKE '%$keyword%'
OR
zip LIKE '%$keyword%'

ORDER BY if(lname = '' or lname is null,1,0), lname ASC, fname $limit"); */
$result = mysql_query ("SELECT * FROM attorney USE INDEX (index1) WHERE MATCH (lname, fname, city, state, zip) AGAINST ('%$keyword%' IN BOOLEAN MODE)

");


$row = mysql_fetch_array($result);
if (!$result) 
    {
    die("Error: Data not found..");
    }

等等……

【问题讨论】:

    标签: php mysql indexing sql-like


    【解决方案1】:

    您无需在全文搜索中使用%

    试试这个:

    SELECT  *
    FROM    attorney
    WHERE   MATCH (lname, fname, city, state, zip) AGAINST ('+Smith' IN BOOLEAN MODE)
    

    另请注意,长度小于 4 个字符的单词不会被索引,也不会使用默认的 MySQL 设置进行搜索。

    如果需要搜索短词,请添加

    ft_min_word_len = 1
    

    进入您的my.cnf,然后重建全文索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      相关资源
      最近更新 更多