SQL函数喜欢

时间:2019-12-09 20:37:17

标签: php codeigniter

我在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;

但是当我使用另一个过滤器时不起作用...为什么?

1 个答案:

答案 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;