MYSQL / PHP搜索未找到数据库中的所有记录

时间:2013-04-04 07:31:11

标签: php mysql indexing sql-like

我真的一直在墙上用这个打我的头,我可以用一些帮助。我有一个MYSQL数据库,其记录少于900。我必须跨多个列进行全文搜索,但它似乎不起作用。当我搜索“LName”字段时,它会显示一些记录,例如,如果我搜索“Smith”,它返回7行,当数据库包含8.当我搜索单个姓氏“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..");
    }
等等......

1 个答案:

答案 0 :(得分:2)

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

试试这个:

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

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

如果您需要搜索短字,请添加

ft_min_word_len = 1

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