成绩排序的php代码,php – 如何对此代码的结果进行排序?

我创建一个允许用户输入问题的搜索功能,然后我的代码将匹配尽可能多的单词与MySQL数据库中已有的问题,并显示前5个结果,具体取决于匹配的单词数量这个问题.

我使用count()函数来计算匹配单词的数量,但是此时显示的结果显示为数据库中具有50%单词匹配或更多的前5个结果.我希望结果首先显示为最高匹配,并且对于数据库中的每个结果都会向下显示,但只显示前5个.

这是我的代码

include("config.php");

$search_term = filter_var($_GET["s"], FILTER_SANITIZE_STRING); //User enetered data

$search_term = str_replace ("?", "", $search_term); //remove any question marks from string

$search_count = str_word_count($search_term); //count words of string entered by user

$array = explode(" ", $search_term); //Seperate user enterd data

foreach ($array as $key=>$word) {

$array[$key] = " title LIKE '%".$word."%' "; //creates condition for MySQL query

}

$q = "SELECT * FROM posts WHERE " . implode(' OR ', $array); //Query to select data with word matches

$r = mysql_query($q);

$count = 0; //counter to limit results shown

while($row = mysql_fetch_assoc($r)){

$thetitle = $row['title']; //result from query

$thetitle = str_replace ("?", "", $thetitle); //remove any question marks from string

$title_array[] = $thetitle; //creating array for query results

$newarray = explode(" ", $search_term); //Seperate user enterd data again

foreach($title_array as $key => $value) {

$thenewarray = explode(" ", $value); //Seperate each result from query

$wordmatch = array_diff_key($thenewarray, array_flip($newarray));

$result = array_intersect($newarray, $wordmatch);

$matchingwords = count($result); //Count the number of matching words from

//user entered data and the database query

}

if(mysql_num_rows($r)==0)//no result found

{

echo "

No result found!
";

}

else //result found

{

echo "

  • ";

$title = $row['title'];

$percentage = '.5'; //percentage to take of search word count

$percent = $search_count - ($search_count * $percentage); //take percentage off word count

if ($matchingwords >= $percent){

?>

'><?php echo $title ?>   No. matching words: <?php echo $matchingwords; ?>

$count++;

if ($count == 5) {break;

}

}else{

}

}

echo "

";

}

?>

下图显示了当我在搜索栏中搜索“如何制作我自己的网站”时会发生什么.我已经在数据库中有几个问题用于测试,这些问题都是类似的问题,最后一个条目与我问的问题完全匹配,但由于它目前显示为前5个mathing结果,它忽略了完整匹配.

以下是该搜索的结果.

我添加了一些代码,显示每个问题中有多少单词匹配,这样你就可以看到它运行得更好一些.它也是一个巧合,它按升序排列,显示数据库中的前5个匹配结果.

我需要添加什么代码来安排它,以便它显示最接近整个数据库的匹配,然后是第二个最佳匹配,第三个等…?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值