我有一个包含搜索词结果的数组。请看看打击代码
$keyword = trim($_POST['keyword']);
$keyword = preg_replace('!\s+!', ' ', $keyword);
$words = explode(' ', $keyword);
$keyword = str_replace(" ","+",$keyword);
$query = "SELECT * FROM videos WHERE MATCH (video_name) AGAINST ('$keyword' IN BOOLEAN MODE)";
$q_result = mysql_query($query) or die (mysql_error());
if (mysql_num_rows ($q_result) != 0) {
while ($row = mysql_fetch_assoc($q_result)) {
$id = $row['id'];
$video_name = $row['video_name'];
$result[]= "$id $video_name";
}
}
foreach($result as $res){
echo "$res <br>";
}
}
它运行良好。但它以ID升序显示结果。我想要的是,如果一行包含全部或最大关键字,则它应该是数组的第一个元素。
让我进一步解释。假设我们有3行 id video_name 1如何创建php代码。 未来2种PHP语言范围。 3 php的未来。
如果用户搜索“将来的PHP语言范围”,则该数组应按ID 2、3、1排列
这是输出。如您所见,查询我已经搜索了3个字
希望清楚
答案 0 :(得分:1)
坦白地说,this question与Nico Haase提到的非常相似。
您可以使用以下查询:
SELECT videos.*,
MATCH (video_name) AGAINST ('$keyword' IN BOOLEAN MODE) AS relevance
FROM videos
WHERE MATCH (video_name) AGAINST ('$keyword' IN BOOLEAN MODE)
ORDER BY relevance DESC
在这里,您将使用计算值“相关性”,该值作为要按其排序的每一行的“权重”来执行。该值将采用数字形式确定重量。当大多数关键字都在此处时,此权重将较高,而当关键字较少时,此权重将降低。
UPD::如果您希望在PHP方面而不是在数据库引擎方面进行排序,则可以检查函数usort。它允许定义您自己的逻辑以对任何结构的数组进行排序。就我个人而言,我更喜欢在这种情况下进行数据库端排序。