1

你好我有小问题

我想按名称在mysql中搜索

我在搜索模型中有这个代码

 $this->db->limit($limit, $start);
        $this->db->like("name",$by);    
        $res = $this->db->get('walls');
            if ($res->num_rows() > 0)
                return $res->result();

$by = "megan" 的结果;正在工作中

但是当 $by = "megan fox"; 不管用

在 mysql 名称中,我有“megan fox”;

我尝试了 urldecode 但无济于事。

我使用codeigniter框架..

有任何想法吗?

4

3 回答 3

2
 $this->db->limit($limit, $start);
        $this->db->like("name",$by);    
        $res = $this->db->get('walls');
            if ($res->num_rows() > 0)
                return $res->result();

您可能想在子句示例中添加BOTH, LEFT,RIGHTlike()

$this->db->like("name",$by,'BOTH'); // left and right wild card %name%
$this->db->like("name",$by,'LEFT'); // left  wild card %name
$this->db->like("name",$by,'RIGHT'); // right wild card name%

您可以在http://ellislab.com/codeigniter/user-guide/database/active_record.html阅读更多内容

于 2013-03-16T14:58:15.537 回答
1

您可以先将$by变量拆分为单独的值,如下所示:

$by = explode(" ", $by);

然后尝试像这样制作like子句

$this->db->like("name",$by[0]);
$this->db->or_like("name",$by[1]); 

它会产生这样的东西

 WHERE name LIKE '%megan%' OR name LIKE '%fox%'

这假设您总是将 2 个变量传递给$by,用空格分隔。您必须对其进行调整以确保它在每种情况下都能正常工作,例如,当只有一个变量传递给您时,$by您应该对其进行检查。

请注意,这比将姓名和姓氏拆分为表中的两个单独字段并在每个字段中查询特定姓名或姓氏要慢得多。如果您关心优化,您应该这样做。

于 2013-03-16T21:38:57.510 回答
0

使用 urldecode 函数来解决这个在你的模型中试试这个

    $by= urldecode($by);

    $this->db->limit($limit, $start);
    $this->db->like("name",$by);    
    $res = $this->db->get('walls');
        if ($res->num_rows() > 0)
            return $res->result();
于 2013-03-17T06:38:26.557 回答