codeigniter query prbolem



这段代码在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'))
   )

但是我想在我的代码点火器上使用此代码,但它不起作用。

我的代码点火器查询代码是

    $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;
    }

出了什么问题请帮助我

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

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

您已经给出了 where 参数值,但没有给出要匹配的内容
例如。

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

where_in的文档:

$this->db->where_in();

在 ("项目"、"项目") SQL 查询中生成一个 WHERE 字段,该字段与 AND 联接 如果合适

$names = 数组('Frank', 'Todd', 'James'); $this->db->where_in("用户名",$names);产生:哪里用户名 IN("弗兰克","托德","詹姆斯")


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

您应该重新编写子查询并使用连接以获得更好的性能,而无需提供有关表/关系和所需结果的完整信息 我无法为您提供新查询,但您可以在活动记录的 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 传递,以防止查询被 bactick 引用或者,您可以使用query()函数来运行原始查询

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

最新更新