Php 使用数据表进行mySQL搜索
我正在使用DataTables和CodeIgniter在mySql中搜索数据 下面是控制器搜索循环和模型 控制器搜索大楼Php 使用数据表进行mySQL搜索,php,mysql,codeigniter,datatables,Php,Mysql,Codeigniter,Datatables,我正在使用DataTables和CodeIgniter在mySql中搜索数据 下面是控制器搜索循环和模型 控制器搜索大楼 if (isset($searchValue) && $searchValue != '') { $searching = array(); for ($i=0; $i<count($columns); $i++) //Loop search in all defined columns {
if (isset($searchValue) && $searchValue != '')
{
$searching = array();
for ($i=0; $i<count($columns); $i++) //Loop search in all defined columns
{
$searching = $this->db->or_like($columns[$i], $searchValue);
}
}
else
{
$searching = NULL;
}
$this->model->get_myreports($this->session->userdata('user_id'), $searching);
这反过来会导致下面的sql查询
SELECT * FROM `reports` WHERE `report_id` LIKE '%sup%' ESCAPE '!' OR `report_name` LIKE '%sup%' ESCAPE '!' OR `report_submitted` LIKE '%sup%' ESCAPE '!' OR `report_total` LIKE '%sup%' ESCAPE '!' OR `report_status` LIKE '%sup%' ESCAPE '!' OR `report_received` LIKE '%sup%' ESCAPE '!' AND `user_id` = '4' ORDER BY `report_status` DESC, `report_id` LIMIT 10
现在的问题是,
它在执行搜索时显示所有用户的报告,即使我告诉用user_id=4搜索,它也显示user_id=1的报告,而只执行搜索,
在正常的datatables
页面加载时,它会显示用户_id=4的正确报告,但问题只是在搜索查询中
如何仅搜索用户\u id=4
谢谢,试试这个。为整块或整块添加括号
SELECT * FROM `reports` WHERE (`report_id` LIKE '%sup%' ESCAPE '!' OR `report_name` LIKE '%sup%' ESCAPE '!' OR `report_submitted` LIKE '%sup%' ESCAPE '!' OR `report_total` LIKE '%sup%' ESCAPE '!' OR `report_status` LIKE '%sup%' ESCAPE '!' OR `report_received` LIKE '%sup%' ESCAPE '!') AND (`user_id` = '4') ORDER BY `report_status` DESC, `report_id` LIMIT 10
可能是这样的疑问。在搜索中添加()括号
SELECT * FROM `reports` WHERE (`report_id` LIKE '%sup%' ESCAPE '!' OR `report_name` LIKE '%sup%' ESCAPE '!' OR `report_submitted` LIKE '%sup%' ESCAPE '!' OR `report_total` LIKE '%sup%' ESCAPE '!' OR `report_status` LIKE '%sup%' ESCAPE '!' OR `report_received` LIKE '%sup%' ESCAPE '!') AND `user_id` = '4' ORDER BY `report_status` DESC, `report_id` LIMIT 10
应该是这样的:
public function get_myreports($user_id, $searching)
{
$this->db->->group_start()
->or_like($searching)
->group_end()
->where('user_id', $user_id);
return $this->db->get('reports')->result_array();
}
好的,那么现在我需要了解如何在CI框架查询$this->model->get_myreports($this->session->userdata('user_id'),'('.$search'))中构建括号;使用concatenate.I就快到了,但是它创建了这样的东西,它只添加了一个大括号,并且…….从
reports
WHEREreport\u id
像“%sup%”ESCAPE!“或您收到的报告
如“%sup%”“ESCAPE”!“和()和user\u id
='4'顺序按report\u status
DESC,report\u id
LIMIT 10$search=$this->db>或类似($columns[$i],$searchValue)
应该像一个数组,然后or_like将执行paradensis的分组任务:$search[$columns[$i]]=$searchValue代码>现在还有一个问题,当我删除搜索的所有关键字时,现在它在datatable中显示错误,因为搜索无法完成,…从<代码>ec_reports
中选择*(如“%”ESCAPE'!')和<代码>用户id='4'ORDER BY<代码>报告状态描述,report\u id
LIMIT 10添加IF
条件,例如IF($search!=NULL){…}else{..仅当用户id子句…不需要分组时}
public function get_myreports($user_id, $searching)
{
$this->db->->group_start()
->or_like($searching)
->group_end()
->where('user_id', $user_id);
return $this->db->get('reports')->result_array();
}
$this->model->get_myreports($this->session->userdata('user_id'), '('.$searching.')');
SELECT * FROM `reports` WHERE (`report_id` LIKE '%sup%' ESCAPE '!' OR `report_name` LIKE '%sup%' ESCAPE '!' OR `report_submitted` LIKE '%sup%' ESCAPE '!' OR `report_total` LIKE '%sup%' ESCAPE '!' OR `report_status` LIKE '%sup%' ESCAPE '!' OR `report_received` LIKE '%sup%' ESCAPE '!') AND `user_id` = '4' ORDER BY `report_status` DESC, `report_id` LIMIT 10