【问题标题】:how to query like for more than one keyword如何查询多个关键字的like
【发布时间】:2014-08-30 00:28:13
【问题描述】:

我有一个查询来搜索内容表以查找带有一些关键字的行。(codeigniter)

我有一列存储关键字(省名)。

我有一个主要省份和相关省份,我应该搜索它们。

我有一个关键字数组,但不清楚它有多少索引。

那么如何使用多个关键字搜索内容

这是我在模型中的查询

public function province($province_name,$provinces_name,$language)
{
    $ps_name = str_replace("-", " ", $provinces_name);
    $lang=$language;

    $data = $this->db
                 ->select('*')
                 ->from('content')
                 ->where("language",$lang)
                 ->where("keywords",$province_name)
                 ->or_like("keywords","%$ps_name%")
                 ->limit("14")
                 ->order_by("id","DESC")
                 ->get();

    if ($data->num_rows > 0) {
        return $data->result();
    } else{
        return false;
    }
}

【问题讨论】:

    标签: php mysql codeigniter search model


    【解决方案1】:

    如果您有一组关键字,并且希望一次搜索每个关键字,则可以在循环中使用 $this->db->or_like()。试试下面的代码:

    $keywords = array("keyword1",
                      "keyword2",
                      "keyword3",
                 );
    
    foreach($keywords as $k)
    {
        $this->db->or_like("keywords", $k);
    }
    
    $this->db->where("language", $lang);
    $this->db->limit("14");
    $this->db->order_by("id", "DESC");
    $query = $this->db->get("content");
    

    【讨论】:

    • 但是如何使用 foreach 进入查询?
    • ->select('*') ->from('noor_content') foreach($provinces_name as $k) { ->or_like("keywords", $k); } ->where("language",$lang) ->where("keywords",$province_name) ->limit("14") ->order_by("id","DESC") ->get();
    • 目前您正在使用链接方法来构建查询。您可以像我上面所做的那样中断您的查询。循环通过or_like 将创建一个or_like-wildcards-keyword 链。
    【解决方案2】:

    不确定 CI 的具体实现,但如果您正在使用多个关键字执行类似搜索的功能,您可以查看 MySQL's full-text search(适用于 InnoDB 或 MyIASM)。或者一个不错的教程here

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2012-04-28
      • 1970-01-01
      相关资源
      最近更新 更多