MySQL - 按相关性排序结果(MATCH AGAINST?)

时间:2017-03-01 09:36:19

标签: php mysql

我的查询大部分都有效,但唯一的障碍似乎是结果的显示顺序。我想根据与搜索的相关性或最接近的匹配来显示订单;例如,用户可能会搜索Accessories,但结果显示如下,最好在顶部显示Accessories

用户也可以搜索Exhaust Accessories,当然,如果它也显示在结果的顶部,而不是按照当前显示的ID排序,那么它将是理想的。< / p>

我尝试过使用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");

1 个答案:

答案 0 :(得分:0)

如何首先进行严格匹配以及使用全文匹配进行联合(因此您将首先使用&#39;附件&#39;)。为了消除重复,您可以使用DISTINCT。

//    challenge.sender?.useCredential(credential, forAuthenticationChallenge: challenge)

我相信您可以改进上述内容以符合您的要求。