我写的分词模糊搜索出现了一点点问题,求朋友们帮我看看?

我写的分词模糊搜索出现了一点点问题,求朋友们帮我看看?

源代码:
$sql.= "select ".TABLE_PREFIX."tradename.* from ".TABLE_PREFIX."tradename, ".TABLE_PREFIX."companyname where ".TABLE_PREFIX."tradename.userid=".TABLE_PREFIX."companyname.userid ";

$str=$wd;
$len=mb_strlen($str,'gb2312');
$arrk1=array();
for($k1=0;$k1<$len;$k1++) {
$arrk1[$k1]=mb_substr($str,$k1,1,'gb2312');

if ($k1==0){

$sql.= " and ".TABLE_PREFIX."tradename.title like '%".$arrk1[0]."%'";
}else{

$sql.=" or ".TABLE_PREFIX."tradename.title like '%".$arrk1[$k1]."%'";

}
}
$sql = $sql." ORDER BY ".TABLE_PREFIX."companyname.grade desc,".TABLE_PREFIX."tradename.addtime desc";

因为我想实现搜索后,优先显示companyname表中grade等级高的会员信息,这段代码在执行后,会搜索出很多重复的记录出来,比如本来只有5条记录,但经搜索后,却出现了30多条记录,且有好多的记录是相同的!求朋友们帮我分析分析是哪里出了问题,深深的拜谢了!

这样写就没有出错,但是不能优先显示companyname表中grade等级高的会员信息:


$sql.= "select ".TABLE_PREFIX."tradename.* from ".TABLE_PREFIX."tradename  "

$str=$wd;
$len=mb_strlen($str,'gb2312');
$arrk1=array();
for($k1=0;$k1<$len;$k1++) {
$arrk1[$k1]=mb_substr($str,$k1,1,'gb2312');

if ($k1==0){

$sql.= " where ".TABLE_PREFIX."tradename.title like '%".$arrk1[0]."%'";
}else{

$sql.=" or ".TABLE_PREFIX."tradename.title like '%".$arrk1[$k1]."%'";

}
}
$sql = $sql." ORDER BY  TABLE_PREFIX."tradename.addtime desc";

第一个的条件有问题。你先是一个 and 然后 几个 or, 后面的 or 应该合并成一个再和第一个 and。要不只要一个or成立就可以了,导致很多结果输出。可以这样写

[复制到剪切板]
CODE:
<?php
$sql
.= "select ".TABLE_PREFIX."tradename.* from ".TABLE_PREFIX."tradename, ".TABLE_PREFIX."companyname where ".TABLE_PREFIX."tradename.userid=".TABLE_PREFIX."companyname.userid ";

$str=$wd;
$len=mb_strlen($str,'gb2312');
$arrk1 $sql_arr = array();
for(
$k1=0;$k1<$len;$k1++) {
    
$arrk1[$k1]=mb_substr($str,$k1,1,'gb2312');
    
$sql_arr[] = TABLE_PREFIX."tradename.title like '%".$arrk1[$k1]."%'";
}

$sql .= count($sql_arr) ? ' and ( '.implode(' or '$sql_arr).' )':'';

$sql $sql." ORDER BY ".TABLE_PREFIX."companyname.grade desc,".TABLE_PREFIX."tradename.addtime desc";
?> ;


[ 本帖最后由 我不是鱼 于 2009-11-13 09:44 编辑 ]
如履薄冰

十分感谢楼上热心的朋友“我不是鱼”,您真是一个好人

将您的代码复制过去之后,出现了这样的错误

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ....

我想出现问题的地方是不是在这里

$sql .= count($sql_arr) ? ' and ( '.implode(' or ', $sql_arr).' )':'';

您能再帮我检查一下错误的地方吗?谢谢了

再次感谢楼上热心的 我不是鱼,我已经解决了!