程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql 症結詞相干度排序辦法具體示例剖析

mysql 症結詞相干度排序辦法具體示例剖析

編輯:MySQL綜合教程

mysql 症結詞相干度排序辦法具體示例剖析。本站提示廣大學習愛好者:(mysql 症結詞相干度排序辦法具體示例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql 症結詞相干度排序辦法具體示例剖析正文


小項目有時須要用到症結詞搜刮相干性排序,用sphinx顯得殺雞用牛刀,就用mysql的order by對於下。
辦法一:

select * from articles where (title LIKE '%keywords%') or (content LIKE '%helloworld%') order by ((CASE WHEN title LIKE '%keywords%' THEN 2 ELSE 0 END) + (CASE WHEN content LIKE '%helloworld%' THEN 1 ELSE 0 END)) ASC, dateline DESC

辦法二:
打個比喻,假如搜刮症結字“IBM”,“辦事器”,
起首,對搜刮症結字的處置,代碼以下:

$kw = preg_replace("/(\s+)|( +)+/","", $kw);//替換空格,換行,tab,中文空格
$kw = preg_replace( "/(^\s*)|(\s*$)/ ", "",$kw);//去除首尾空格
$kw = preg_replace("/(\s+)/", "", $kw);//調換多個空格為一個空格
$q = explode('',$kw);//列舉症結字

這裡還須要添加一個去失落標點符號的代碼,然則這段代碼會湧現成績,不曉得若何處理。

然後是生成SQL語句的代碼

$f = array(”name”,”description”); //查詢的字段name=產物名,description=產物描寫
$s = array(4,2); //權重,name字段婚配積分4分,description字段婚配積2分,最初按積分排序


//創立查詢前提語句
for($i=0;$i<count($q);$i++){
for($j=0;$j<count($f);$j++){
$clause[$c] = ” (”.$f[$j].” LIKE ‘%”.$q[$i].”%') “;
$score[$c] = ” IF(LOCATE('”.$q[$i].”‘, “.$f[$j].”), “.$s[$j].”, 0) “;
$c++;
}
}
$sql = “SELECT id, name, description,
(”.implode(”+”,$score).”) AS score
FROM product
WHERE (”.implode(” OR “,$clause).”)
ORDER BY score DESC”;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved