2017-03-01 4 views
0

私はほとんどの部分で問題なく動作しますが、結果が表示される順番が問題になります。私は、検索または最も近いものとの関連性に基づいて注文を表示したいと思います。たとえば、ユーザーはAccessoriesを検索することがありますが、結果は以下のように表示され、上部にはAccessoriesと表示されるのが理想的です。MySQLの結果を関連性の順に並べ替えます(一致しません)

ユーザーはExhaust Accessoriesを検索することもできますが、現在のIDのように表示されるのではなく、結果の上部にも表示されるのが理想的です。

私はmatchagainstを使ってみましたが、私の限られたMySQLの知識では正しく動作しないようです。 Accessories

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

を検索するときに

クエリ結果コードIは

$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で最も近いものが最初に表示されます]の複製があります(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

私は使っていると正確なクエリで救いの手のチャンスですか? –

関連する問題