Php 使用数据表进行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 {

我正在使用DataTables和CodeIgniter在mySql中搜索数据

下面是控制器搜索循环和模型

控制器搜索大楼

    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
WHERE
report\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_i‌​d'), '('.$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