php - 如何使用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
解决方案
您需要的 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
推荐阅读
- css - 防止 SVG 笔划填充文本
- .net - Vb.net 如何将十进制 value1.9 转换为 1.09 而不是 1.90
- javascript - 使用 xampp 服务器从 Javascript 向端口 3000 上的 nodejs 发送 ajax 请求
- javascript - 有没有办法在javascript中做到这一点?还是可以导入/导出
- excel - 根据 ID 将日期列拆分为开始和结束列
- html - 带有边框半径和框阴影的 CSS 剪辑路径
- ionic-framework - 如何在离子输入字段中使用对象
- c# - vscode中IConfiguration映射的自动完成?
- google-app-engine-python - URL 的身份识别代理 (IAP) - Google 应用引擎
- c - C、printf为什么在一位长的后面加一个“D”?