2016-02-24 44 views

回答

0

Here有人问起如何排序方式按何种在MySQL中,有人建议应该是一个很好的查询,你需要做的是:

SELECT product_name 
    FROM products 
WHERE product_name like '%search_term%' 
GROUP BY name 
ORDER BY CASE WHEN product_name like 'search_term %' THEN 0 
       WHEN product_name like 'search_term%' THEN 1 
       WHEN product_name like '% search_term%' THEN 2 
       ELSE 3 
      END, product_name 

您将得到SEARCH_TERM来自用户,并请有mysql_real_escape_string出于安全原因,以检查它,但我们不能在Zend中使用mysql_real_escape_string。然后我们必须通过ZEND检查它,我们使用quote()而不是mysql_real_escape_string

//get the search_term what user is looking for: 
$search_term=$this->parameters['search_term']; 

//mysql_real_escape_string: 
$search_term= $this->db->quote($search_term); 
$search_term = substr($search_term, 1, strlen($search_term)-2); //Remove quotation from it. 

$query = $this->db->select(); 
$query->from('products', ['product_id', 'product_name', 'product_sub_name']); 
$query->where('product_name LIKE ?', '%'.$search_term.'%'); 
$query->group('product_name'); 
$query.=" 
    ORDER BY CASE WHEN product_name like '$search_term %' THEN 0 
     WHEN product_name like '$search_term%' THEN 1 
     WHEN product_name like '% $search_term%' THEN 2 
     ELSE 3 
     END, product_name"; 

return $this->db->fetchAll($query); 

这将根据上面的SQL查询,我发现here

返回你所需要的,而排序相关的,如果你要限制搜索,您可以轻松地将它添加到$query变量。然后你会有(例如限制为10个结果):

$query.=" 
    ORDER BY CASE WHEN product_name like '$search_term %' THEN 0 
     WHEN product_name like '$search_term%' THEN 1 
     WHEN product_name like '% $search_term%' THEN 2 
     ELSE 3 
     END, product_name 
     LIMIT 0 , 10"; 
+0

'mysql_real_escape_string()'在PHP7中被删除。引用字符串的ZF方式是正确的。 –

+0

@TimFountain是的你是对的,但我只是想举一个例子,并且人们知道mysql_real_escape_string(),我认为这样更好地让他们的答案更清晰 – M98

相关问题