我正在根据关键字用户类型查询数据,以摧毁我的数据库列。
假设用户想要搜索邮政编码和类型114
,那么我们的脚本应该提供具有来自数据库zip字段的zip的结果,它们意味着模式匹配或我不确定,接下来如果用户想要查询地址和类型所需的地址,所以我们的系统应该从数据库地址字段中提供地址。
我使用的代码是:
$test = $_REQUEST['keyword'];
echo $query_rsTest = "SELECT zip, ste, st, st_num, town, addr, st_sfx,
MATCH (zip, ste, st, st_num, town, addr, st_sfx) against('*$test*' IN BOOLEAN MODE) as relevance
FROM
tbl_property
WHERE MATCH (zip, ste, st, st_num, town, addr, st_sfx) against('*$test*' IN BOOLEAN MODE) order by relevance desc limit 0,5";
$rsTest = mysql_query($query_rsTest) or die(mysql_error());
$row_rsTest = mysql_fetch_assoc($rsTest);
if (isset($row_rsTest['zip'])) {?>
<div id='fetchRecs'><ul>
<?php
while($row = mysql_fetch_array($rsTest)) {
echo '<li><a href="#">'.$row['zip'].'</a></li>';
}
?>
</ul></div>
<?php } elseif (isset($row_rsTest['ste'])){?>
<div id='fetchRecs'><ul>
<?php
while($row = mysql_fetch_array($rsTest)) {
echo '<li><a href="#">'.$row['ste'].'</a></li>';
}
?>
</ul></div>
<?php }
这是我的表结构和示例记录。
我只是希望用户根据他在数据库中的查询获得准确的结果。意味着我们是否可以过滤数据库列,比如用户输入一些blah blah关键字,这样我们就应该匹配它并查询相应的列来查找blah blah列的结果。
感谢。
答案 0 :(得分:0)
请提供SHOW CREATE TABLE tbl_property;
寻找114
作为邮政编码的前缀需要以这种方式完成:
WHERE zip LIKE '114%
,而不是FULLTEXT。
MyISAM的FULLTEXT默认最小字大小为4(可以更改,但需要重建索引)。 InnoDB的FULLTEXT找不到任何东西,你只需要一个比它的最小尺寸短的字(默认为3)。所以,过滤掉短语。
不要在AGAINST中使用前导“*”,这不起作用。即使添加一个尾随的“*”在你的例子中也有麻烦 - 注意'* point pleasant *'的意思是“寻找以'point'结尾的单词和以'pleasant'开头的单词。再次,你需要按摩传入的查询。
建议你解析传入的查询,对用户要求的内容进行智能猜测(例如:114,本身就是一个3位数的邮编; 114加上其他东西可能是一个地址)。了解“正则表达式”,您将需要它们。