我在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;
但是当我使用另一个过滤器时不起作用...为什么?
文档 (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;