查询生成器读取条件如列 - 字段列表中的未知列

时间:2016-09-05 11:12:08

标签: codeigniter query-builder

我有一个使用条件IF语句的MySQL表达式。作为MySQL表达式,它返回TRUE或FALSE,但是当我在CodeIgniter的查询构建器中使用它时,我收到一个错误。该错误表明条件的结果是读取像列,但我该如何解决这个问题?谢谢。

MySQL:

SELECT
    positions.max_vol AS attendee_limit,
    COUNT(users_positions.user_id) AS total_attendees,
    IF(COUNT(users_positions.user_id) < positions.max_vol
            OR positions.max_vol IS NULL,
        TRUE,
        FALSE) AS result
FROM
    positions
        INNER JOIN
    users_positions ON positions.id = users_positions.position_id
WHERE
    positions.id = 16
        AND users_positions.calendar_date = '2016-09-05'

功能:

private function check_attendee_limit($pos_id = NULL, $date = NULL)
{
    $this->db->select('positions.max_vol, COUNT(users_positions.user_id), IF(COUNT(users_positions.user_id) < positions.max_vol OR positions.max_vol IS NULL, TRUE, FALSE)'); 
    $this->db->from('positions');
    $this->db->join('users_positions', "positions.id = users_positions.position_id", 'inner');
    $this->db->where('positions.id', $pos_id);
    $this->db->where('users_positions.calendar_date', $date);
    $query = $this->db->get();
    return $query->result(); // return the rows selected
}

错误:

A Database Error Occurred

Error Number: 1054
Unknown column 'TRUE' in 'field list'

SELECT `positions`.`max_vol`, COUNT(users_positions.user_id), IF(COUNT(users_positions.user_id) < positions.max_vol OR positions.max_vol IS NULL, `TRUE`, FALSE)
FROM `positions`
INNER JOIN `users_positions` ON `positions`.`id` = `users_positions`.`position_id`
WHERE `positions`.`id` = '15'
AND `users_positions`.`calendar_date` = '2016-09-05'

Filename: models/projects/Calendar_model.php

Line Number: 141

1 个答案:

答案 0 :(得分:1)

CI会添加反引号 - 这意味着您必须阻止CI逃避您的选择

试试这个

$this->db->select('positions.max_vol, COUNT(users_positions.user_id), IF(COUNT(users_positions.user_id) < positions.max_vol OR positions.max_vol IS NULL, TRUE, FALSE)', false); 

如果您担心安全问题 - 在您的情况下,这并不重要,因为您在选择查询中不使用任何用户输入。

您可以找到有关查询构建器here

的更多信息