首页 > 解决方案 > 如何使用ajax在where子句中选择具有数组值的数据 - codeigniter

问题描述

我的视图中有一个名为的多项选择,categories[]其中包含id我表上的值。我想从中获取价值categories[]并用它创建一个 where 子句:Where id = categories[] selected values。但是,它是一个数组。如何使用数组值设置 Where 子句?所以我可以获取 id 从中选择值的数据categories[]

我的表中有 3 列:

(id, category, name).

我的表的值是:

(1, "food", "Pizza")
(2, "food", "Burger")
(3, "drink", "Mineral Water")
(4, "drink", "Tea")
(5, "snack", "Apple Pie")

我所做的是:通过在我的视图中执行此命令来获取选定的值:

var v = $('[name="categories[]"]').val();

//and doing like this, so I can get it to my controller
"data": 'cat=' + v,

然后,我在控制器中获得选定的值,如下所示:

public function getData(){
   $cat = $this->input->post('cat');
   $where = array('id' => [$cat]);
   $result = $this->my_model->getData($where);

   //and some code to set the data in my table
   //and code for return the data
}

最后,我在我的模型中设置了 WHERE 子句,如下所示:

public function getData($where){
   $this->db->select('*');
   $this->db->from($this->table);
   $this->db->where($where);

   $query = $this->db->get();
   return $query->resut();
}

我在上面完成查询的方式如下:

Unknown column 'Array' in 'where clause'

SELECT `id`, `category`, `name` FROM `my_table` WHERE `id`= Array ORDER BY `category` ASC

标签: phparraysajaxcodeigniterwhere-clause

解决方案


您需要的 SQL 是WHERE IN,查询看起来像这样

SELECT * FROM table WHERE id IN (12,14,55,346);

在您的第一个函数中,确保 $cat 是一个数组

public function getData(){
   $cat = $this->input->post('cat');
   if (!is_array($cat)) $cat = explode(",", $cat);
   $where = array('id' => $cat);
   $result = $this->my_model->getData($where);
}

然后在模型中使用 where_in()

public function getData($where){
   $this->db->select('*');
   $this->db->from($this->table);
   $this->db->where_in($where);
   $query = $this->db->get();
   return $query->result();
}

https://codeigniter.com/userguide3/database/query_builder.html#selecting-data


推荐阅读