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

用户也可以搜索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");

最佳答案

首先要进行严格匹配,然后再与全文匹配进行联合(这样,您将首先拥有“附件”)。要消除重复,可以使用DISTINCT。

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


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

关于php - MySQL-按相关性排序结果(是否匹配)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42528136/

10-10 01:17
查看更多