php - mySQL 使用数据表进行搜索

标签 php mysql codeigniter datatables

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

下面是 Controller 搜索循环和模型,

Controller 搜索构建

    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);

模型函数,

public function get_myreports($user_id, $searching)
{
    $this->db->where('user_id', $user_id);
    $searching;
    return $this->db->get('reports')->result_array();
}

这又会导致下面的 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 的报告,而仅进行搜索, 在页面加载时的正常数据表中,它显示了 user_id = 4 的正确报告,但问题仅出现在搜索查询中,

如何仅搜索 user_id = 4

谢谢,

最佳答案

应该是这样的:

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();
}

关于php - mySQL 使用数据表进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45727534/

相关文章:

java - 从 Android 设备访问 SQL DB 时,我的 httpEntity 返回 null,任何人都可以告诉我这是为什么吗?

php - 根据输入调整函数中的sql语句

php - 带有多个json对象的json对象

php - 如何在php(codeigniter框架)中将数组从 Controller 传递到库

javascript - 我怎样才能让 PHP 查询根据下拉列表选择来选择某个表?

mysql - 按时间戳之间的间隔对时间戳进行分组,然后从 MySQL 组计算

mysql - join sql命令的使用

php - 使用 codeigniter 用户代理获取准确的操作系统详细信息

php - SQL 查询转义 + codeigniter

php:页面导航后 session 消失