2017-03-01 68 views
0

我有一個查詢大部分的工作,但唯一的障礙似乎是結果顯示的順序。我想根據與搜索或最接近匹配的相關性來顯示訂單;作爲一個例子,用戶可能會搜索Accessories但是結果如下所示,理想情況下在頂部顯示爲AccessoriesMySQL - 通過相關性排序結果(MATCH AGAINST?)

用戶也可以搜索Exhaust Accessories,當然如果它也顯示在結果的頂部,而不是按照當前顯示的ID進行排序,它將是理想的。

我嘗試過使用matchagainst,但似乎無法使用我有限的MySQL知識正常工作。

查詢結果爲Accessories

Exhaust Accessories 
Accessories 
Centre Stand Accessories 
Rear Stand Accessories 
Side Stand Accessories 

搜索時的代碼我與

$arr = explode(' ','Accessories'); 
    $str = ''; 
    $i = 1; 
    $arrCount = count($arr); 

    foreach($arr as $v){ 
     if($arrCount > 1 && $i == 1) { $str.= '('; } 
     $str.= 'wpmj8c_terms.name LIKE "%'.$v.'%" '; 
      if($arrCount > 1 && $arrCount == $i) { $str.= ')'; } elseif($arrCount > 1 && $arrCount != $i) { $str .= " OR " ;} 
     $i++; 
    } 

$cat = $wpdb->get_results("SELECT * 
    FROM wpmj8c_term_relationships 
    LEFT JOIN wpmj8c_term_taxonomy 
    ON (wpmj8c_term_relationships.term_taxonomy_id = wpmj8c_term_taxonomy.term_taxonomy_id) 
    LEFT JOIN wpmj8c_terms on wpmj8c_term_taxonomy.term_taxonomy_id = wpmj8c_terms.term_id 
    WHERE wpmj8c_term_taxonomy.taxonomy = 'product_cat' AND $str 
    GROUP BY wpmj8c_term_taxonomy.term_id"); 
+0

與您以前的問題有什麼不同? –

+0

[MySQL show close match first]可能的重複(http://stackoverflow.com/questions/42511277/mysql-show-closest-match-first) –

+0

你的意思是除了沒有得到有用的答案嗎? –

回答

0

工作如何首先進行嚴格的匹配和工會與全文匹配(所以你會首先有'配件')。爲了消除重複,你可以使用DISTINCT。

select DISTINCT(tab1.name) FROM (SELECT * FROM myTable WHERE name = 'Accessories' UNION SELECT * FROM myTable WHERE name LIKE '%Accessories') as tab1 

我相信你可以改進上述以符合你的要求。

+0

任何機會與我使用的確切查詢的幫助手? –