【问题标题】:How to search multiple words in codeigniter?如何在codeigniter中搜索多个单词?
【发布时间】:2016-01-28 23:59:03
【问题描述】:

我有 3 张表,分别是成分(ingredient_id,名称)、菜单(recipe_id、ingredient_id、category_id)和食谱(recipe_id、r_name、r_description)。

ingredient_id 名称

1 个洋葱

2 保罗
3 胡椒

4 油

recipe_id 成分_id category_id

1 3 1

1 4 1

2 3 1

2 4 1

recipe_id r_name r_description

1 Adob​​o 好吃

2 Kaldereta 恶心

我想要的是,如果我搜索 "Pepper, Oil" ,结果应该是与 adobo 和 kaldereta 成分相对应的食谱。

我试过了,但它只是静态的,我希望它是动态的,而且我想分解成分名称,以便我可以搜索多个单词。

  public function get_halal()
{
    $this->db->distinct();
    $this->db->select('*');
    $this->db->from('recipe');
    $this->db->join('menu', 'menu.recipe_id = recipe.recipe_id');
    $this->db->join('ingredient', 'ingredient.ingredient_id = menu.ingredient_id');
    $this->db->where('menu.category_id = 1');
    $this->db->like('ingredient.ingredient_name','Mango', 'both');
    $query = $this->db->get();
    return $query->result();

}

【问题讨论】:

  • 你在使用Active Record吗?您是否有任何代码您尝试过但不太正确?
  • 是的@Windle 我正在使用活动记录。我已经编辑了我的问题。请看一下。谢谢

标签: php mysql codeigniter


【解决方案1】:

如果我了解您想要做什么,请尝试一下。 你需要设置你的 $search_values,你有一个字符串还是一个数组? 假设你有一个字符串:

//$search_values = "Pepper, Oil";
public function get_halal($search_values)
{
$this->db->distinct();
$this->db->select('*');
$this->db->from('recipe');
$this->db->join('menu', 'menu.recipe_id = recipe.recipe_id');
$this->db->join('ingredient', 'ingredient.ingredient_id = menu.ingredient_id');
$this->db->where('menu.category_id = 1');

if (strpos($search_values, ',') !== false) {
    $search = explode(',' , $search_values);
    $this->db->like('ingredient.ingredient_name', trim($search[0]), 'both');
    unset($search[0]);
        foreach ($search as $term){
            $this->db->or_like('ingredient.ingredient_name', trim($term), 'both');
        }
    }else{
        //this means you only have one value 
        $this->db->like('ingredient.ingredient_name',$search_values, 'both');
    }
    $query = $this->db->get();
    return $query->result();
} 

如果 $search_values 是一个数组,您必须直接跳到 if 条件并执行 foreach。

【讨论】:

  • 在你的 or_like 声明中,第三个参数有什么作用? IE。 “两者”。
【解决方案2】:

首先你必须进行查询,这样你才能找到你搜索过的选定数据

$this->db->select('recipe.r_name');
$this->db->from('recipe');
$this->db->join('menu', 'recipe.recipe_id = menu.recipe_id');
$this->db->join('ingredient' , 'ingredient.ingredient_id = menu.ingredient_id');
$this->db->where('ingredient.ingredient_id' , your search id);
$this->db->get();

See the guide of codeigniter

【讨论】:

  • 但是我怎样才能分解成分名称以便我可以搜索多个单词? @MoizArif
  • 你想做什么...?
【解决方案3】:
$this->db->select('recipe.r_name');
$this->db->from('recipe');
$this->db->join('menu', 'recipe.recipe_id = menu.recipe_id');
$this->db->join('ingredient' , 'ingredient.ingredient_id = menu.ingredient_id');
$this->db->where('ingredient.ingredient_name in (your Search Values));
$this->db->get(); 

试试这个代码。这个代码对我来说很好用

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多