【问题标题】:codeigniter search代码点火器搜索
【发布时间】:2013-03-05 05:48:54
【问题描述】:

你好,我有小问题

我想在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 框架..

有什么想法吗?

【问题讨论】:

  • 你试过直接在phpmyadmin中查询吗?尝试使用 $this->db->last_query() 以确保它准确地输出您对查询的期望

标签: php mysql codeigniter search


【解决方案1】:
 $this->db->limit($limit, $start);
        $this->db->like("name",$by);    
        $res = $this->db->get('walls');
            if ($res->num_rows() > 0)
                return $res->result();

您可能希望在 like() 子句示例中添加 BOTH,LEFT,RIGHT

$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阅读更多内容

【讨论】:

【解决方案2】:

您可以先将 $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 时,您应该对其进行检查。

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

【讨论】:

    【解决方案3】:

    使用 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 2011-06-04
      • 2016-01-28
      • 2012-06-30
      • 2012-02-21
      • 2011-03-29
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多