【问题标题】:codeigniter query prbolemcodeigniter 查询问题
【发布时间】:2014-04-03 13:12:59
【问题描述】:

这段代码在mysql运行命令中完美运行

SELECT employeeCode
FROM employee_details
WHERE employeeCode
IN (
    SELECT DISTINCT (employeeCode) FROM quiz_answer_detailsWHERE submitTime
    IN (SELECT MIN( submitTime ) FROM quiz_answer_details WHERE quizId
    IN (SELECT id FROM quiz_details WHERE uploadtime =  '2014-04-03')
    AND answer IN (SELECT answer FROM quiz_details WHERE uploadtime =  '2014-04-03'))
   )

但我想在我的 codeigniter 上使用此代码,但它不起作用。

我的codeigniter查询代码是

    $this->db->select('employeeCode');
    $this->db->from('employee_details');
    $this->db->where_in('employeeCode');
    $this->db->select('DISTINCT(employeeCode)');
    $this->db->from('quiz_answer_details');
    $this->db->where_in('submitTime');
    $this->db->select('min(submitTime)');
    $this->db->from('quiz_answer_details');
    $this->db->where_in('quizId');
    $this->db->select('id');
    $this->db->from('quiz_details');
    $this->db->where('uploadtime',"2014-04-03");
    $this->db->where_in('answer');
    $this->db->select('answer');
    $this->db->from('quiz_details');
    $this->db->where('uploadtime',"2014-04-03");
    $query=$this->db->get();
    print_r($query);
    if($query->num_rows>=1)
    {
        return $query;
    }
    else
    {
         return false;
    }

有什么问题请帮帮我

【问题讨论】:

  • 你使用的 CodeIgniter 是什么版本的?
  • 我见过很多,但 Active Records 是这样使用的……从来没有。
  • 如果 CodeIgniter 3 - 使用 get_compiled_select(),如果 CodeIgniter 2 - 请参阅 Is there a function like _compile_select or get_compiled_select()? 以及有关使用子查询生成查询的相关问题。

标签: php mysql codeigniter


【解决方案1】:

问题在于这段代码和where_in的后续类似用法

$this->db->where_in('employeeCode');

您已提供 where 参数值,但未提供 要匹配的内容
例如。

$this->db->where_in('employeeCode',$subQuery1);

where_indocumentation

$this->db->where_in();

生成一个 WHERE 字段 IN ('item', 'item') SQL 查询,使用 AND 连接 合适的话

$names = array('Frank', 'Todd', 'James'); $this->db->where_in('username', $names); // 产生:WHERE 用户名 IN(“弗兰克”、“托德”、“詹姆斯”)


您必须为每次调用 where_in 创建一个单独的子查询。

【讨论】:

    【解决方案2】:

    您应该重新编写子查询并使用联接来获得更好的性能,但没有关于您的表/关系和所需结果的完整信息我无法为您提供新查询,但您可以在活动记录的 where 中使用您的子查询功能

    $subquery=" SELECT DISTINCT (employeeCode) FROM quiz_answer_detailsWHERE submitTime
        IN (SELECT MIN( submitTime ) FROM quiz_answer_details WHERE quizId
        IN (SELECT id FROM quiz_details WHERE uploadtime =  '2014-04-03')
        AND answer IN (SELECT answer FROM quiz_details WHERE uploadtime =  '2014-04-03')) ";
    $this->db->select('employeeCode');
    $this->db->from('employee_details');
    $this->db->where('employeeCode IN('.$subquery.')',null,FALSE);
    $query=$this->db->get();
    

    您应该将第三个参数作为 FASLE 传递,以防止查询被 bacticks 引用 或者你可以使用query() fucntion 来运行你的原始查询

    $query=$this->db->query(' your full query here');
    $query->result();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多