Php 我在codeigniter中有一个匹配项,但我需要按最佳匹配项订购

Php 我在codeigniter中有一个匹配项,但我需要按最佳匹配项订购,php,mysql,codeigniter,match,Php,Mysql,Codeigniter,Match,您好,我有这段代码,它可以工作,但匹配不会返回按最佳匹配排序的数组。如何通过类似于$search的方式对该数组进行排序 $this->db->select("p.code, p.STOCK, t.TITLE, p.UNIFICADO, p.BRAND, p.DESCRIPTION, p.PRECIO, p.DEPENDENCIA"); $this->db->from('part_info_titles t'); $this-

您好,我有这段代码,它可以工作,但匹配不会返回按最佳匹配排序的数组。如何通过类似于$search的方式对该数组进行排序

        $this->db->select("p.code, p.STOCK, t.TITLE, p.UNIFICADO, p.BRAND, p.DESCRIPTION, p.PRECIO, p.DEPENDENCIA");
        $this->db->from('part_info_titles t');
        $this->db->join('part_info p', 't.INTERNAL_CODE = p.NKR_CODE');
        $this->db->join('application a', 'p.UNIFICADO = a.UNIFICADO');
        $this->db->where("a.FROM_YEAR <=",$year);
        $this->db->where("a.THRU_YEAR >=",$year);
        $this->db->where("a.MODEL", $model);
        if(($engine != "all")and($engine != 'ALL')){
        $engines = array($engine, 'ALL', 'all','');
        $this->db->where_in('a.ENGINE', $engines);
        }
        $this->db->group_by('p.code'); 
        $this->db->distinct();
        $this->db->where('MATCH (t.TITLE) AGAINST ("'.$search.'")', NULL, false);

        $query = $this->db->get();
        return $query->result_array();

感谢您的帮助。

以下是一个使用您的样本数据测试的解决方案:

    $search = 'door mirror';
    $year = 2000;
    $model = 'NPR';
    $engine = 'all';

    $this->db->select('p.NKR_CODE, p.STOCK, t.TITLE, p.UNIFICADO, p.BRAND, p.DESCRIPTION, p.PRECIO, p.DEPENDENCIA, 
       MATCH (t.TITLE) AGAINST ("'.$search.'") AS relevance', FALSE);
    $this->db->from('part_info_titles t');
    $this->db->join('part_info p', 't.INTERNAL_CODE = p.NKR_CODE');
    $this->db->join('application a', 'p.UNIFICADO = a.UNIFICADO');
    $this->db->where("a.FROM_YEAR <=",$year);
    $this->db->where("a.THRU_YEAR >=",$year);
    $this->db->where("a.MODEL", $model);
    if(($engine != "all") and ($engine != 'ALL')){
       $engines = array($engine, 'ALL', 'all','');
       $this->db->where_in('a.ENGINE', $engines);
    }

    $this->db->where('MATCH (t.TITLE) AGAINST ("'.$search.'")', NULL, false);       

    $this->db->group_by('p.NKR_CODE'); 

    // ORDER BY RELEVANCE IN DESCENDING ORDER
    $this->db->order_by("relevance", "desc");

    $query = $this->db->get();

    // CHECK TO SE IF ANY DATA EXISTS BEFORE RETURNING...
    if($query !== FALSE && $query->num_rows() > 0){
        return $query->result_array();
    }
如果需要,使用纯SQL:

SELECT p.NKR_CODE, p.STOCK, t.TITLE, p.UNIFICADO, p.BRAND, p.DESCRIPTION, p.PRECIO, p.DEPENDENCIA, 
       MATCH (t.TITLE) AGAINST ('door mirror') AS relevance
FROM part_info_titles t
INNER JOIN part_info p ON t.INTERNAL_CODE = p.NKR_CODE
INNER JOIN application a ON p.UNIFICADO = a.UNIFICADO
WHERE 
    a.FROM_YEAR <= 2000
    AND a.THRU_YEAR >= 2000
    AND a.MODEL = 'NPR'
#AND a.ENGINE IN('', 'ALL', 'all')
AND MATCH (t.TITLE) AGAINST ('door mirror')
GROUP BY p.NKR_CODE
ORDER BY relevance DESC;

注意:您提供的示例数据在t.INTERNAL_CODE=p.NKR_CODE中只有一个匹配项,因此只返回了一行。

这给了我致命的错误:在Boolean上调用成员函数result_数组,如果行$this->db->order_by。。。删除了吗?是的,没有那行它可以工作,但顺序不对。奇怪。。。当找不到数据时,通常会发生此错误。。更新示例,检查是否返回任何行…尝试选择匹配。。。作为关联,然后按关联排序。更新了我的答案。这行吗?