【问题标题】:Codeigniter where_in JSON columnCodeigniter where_in JSON 列
【发布时间】:2020-03-26 13:19:35
【问题描述】:

我需要一个 Codeigniter 查询来从一个 JSON 列 MYSQL 表中获取结果。

下面的示例列数据。

["1","2","6","4","3","5","7","9","8"]

目前我正在为此使用波纹管代码,但它不起作用。

$DOCUMENTS = $this->db->select('*')->where('JSON_CONTAINS(BELONG) = '.$_POST['ID'].'')->get('SOLIDARITY_REQUESTED_FILES')->result_array();

【问题讨论】:

    标签: php mysql json codeigniter


    【解决方案1】:

    JSON_CONTAINS 函数至少需要两个参数。查看更多详情HERE

    在查询中添加$_POST 数据是很危险的。具有 input 类的 Codeigniter 从 POST 请求中获取数据。

    $id = $this->input->post('ID');
    
    $DOCUMENTS = $this->db->select('*')->where("JSON_CONTAINS(BELONG, $id)>0")->get('SOLIDARITY_REQUESTED_FILES')->result_array();
    

    如果您需要进一步的指导,请随时联系。

    【讨论】:

    • 现在我正在使用下面的代码。 $OPTION_ID = $_POST['OPTION_ID']; echo json_encode($this->db->query("SELECT * FROM SOLIDARITY_REQUESTED_FILES` JSON_SEARCH(BELONG, 'one', $OPTION_ID, NULL) 不是 NULL")->result_array());`
    【解决方案2】:

    假设我正在获取 city_id 应该在以下列表中的位置的记录。 1,2,3,4,5,6,7,8 然后下面的行你可以添加到你的代码中

        $city_id_list = "1,2,6,4,3,5,7,9,8";
        $this->db->where_in('city_id', $city_id_list);
    

    【讨论】:

      【解决方案3】:

      如果您的 JSON 像您的数据一样格式化为数组,您可以将 ID 连接到逗号和引号。然后 TRIM 方括号并通过 LIKE 语句查找。

      $concat = "CONCAT(',\"',TRIM(LEADING '[' FROM TRIM(TRAILING ']' FROM BELONG)),'\",')";
      $theId = ',"'.$_POST['ID'].'",';
      $DOCUMENTS = $this->db->select('*')->like($concat, $theId)->get('SOLIDARITY_REQUESTED_FILES')->result_array();
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        • 2020-10-22
        相关资源
        最近更新 更多