Php 我在codeigniter中有一个匹配项,但我需要按最佳匹配项订购
您好,我有这段代码,它可以工作,但匹配不会返回按最佳匹配排序的数组。如何通过类似于$search的方式对该数组进行排序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-
$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。。。删除了吗?是的,没有那行它可以工作,但顺序不对。奇怪。。。当找不到数据时,通常会发生此错误。。更新示例,检查是否返回任何行…尝试选择匹配。。。作为关联,然后按关联排序。更新了我的答案。这行吗?