我在Codeigniter上遇到SQL问题。 我想看到以字母A ..开头的客户的姓名,从A到C ..所以A-B-C
我写这段代码:
if ((isset($filtri["name_from"])) && ($filtri["name_from"])) :
$this->db->where("clienti.nome LIKE ",$filtri["name_from"]."%");
endif;
if ((isset($filtri["name_to"])) && ($filtri["name_to"])) :
for($i = $filtri["name_from"]++; $i <= $filtri["name_to"]; $i++){
$this->db->or_where("clienti.nome LIKE ",$i."%");
}
endif;
但是当我使用另一个过滤器时不起作用...为什么?
答案 0 :(得分:0)
文档(https://codeigniter.com/user_guide/database/query_builder.html)使用不同的方法:
如果要控制放置通配符(%)的位置,则可以使用可选的第三个参数。您可以选择“之前”,“之后”,“无”和“两者”(默认设置)。
$this->db->like('title', 'match', 'before'); // Produces: WHERE `title` LIKE '%match' ESCAPE '!'
$this->db->like('title', 'match', 'after'); // Produces: WHERE `title` LIKE 'match%' ESCAPE '!'
$this->db->like('title', 'match', 'none'); // Produces: WHERE `title` LIKE 'match' ESCAPE '!'
$this->db->like('title', 'match', 'both'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
因此,您可以尝试:
if ((isset($filtri["name_from"])) && ($filtri["name_from"])) :
$this->db->like("clienti.nome",$filtri["name_from"],"after");
endif;
if ((isset($filtri["name_to"])) && ($filtri["name_to"])) :
for($i = $filtri["name_from"]++; $i <= $filtri["name_to"]; $i++){
$this->db->or_like("clienti.nome",$i,"after");
}
endif;