如果,加入和concat不在codeigniter工作

时间:2013-12-10 15:30:09

标签: sql codeigniter

我有两个表,其中一个包含3000个区号(所以只是邮政编码的前半部分),另一个表包含商店详细信息,其中包含一个名为postcodes_covered的列,它们都是特定的区号商店封面例如: 商店1(AB1,AB2,AB3,AB4,AB5 ......),商店2(E15,E13,E14 ......)等。我需要创建一个包含3000个区号和一栏“是”的报告“如果表1中的区号包含在表1中,或者如果不包括该区号则表示”否“。我写了一个SQL查询,但是,我需要在codeigniter中编写它。我为codeigniter编写的代码似乎不起作用,我不知道为什么?

SQL查询:

select bodyshops_postcode_allocation.area_code,if(postcodes_covered is null,"No","Yes") as "YeN" from bodyshops_postcode_allocation left join bodyshops on bodyshops.postcodes_covered like concat("%",bodyshops_postcode_allocation.area_code,"%");

    function postcode_allocation()
{
    $this->db->select('bodyshops_postcode_allocation.area_code as area_code')
            ->select('IF(bodyshops.postcodes_covered is null, "No", "Yes") as match_found')
            ->join('bodyshops', 'bodyshops.postcodes_covered LIKE CONCAT("%",bodyshops_postcode_allocation.area_code,"%")')
            ->from('bodyshops_postcode_allocation');


    $this->load->dbutil();
    $data = $this->dbutil->csv_from_result($this->db->get(''));

    $this->output->set_header("Content-type: application/vnd.ms-excel");
    $this->output->set_header("Content-disposition: attachment; filename=postcode_allocation.csv; size=".strlen($data));
    $this->output->set_output($data);

}

1 个答案:

答案 0 :(得分:0)

在CodeIgniter中使用这样的SQL函数时,您需要告诉它不要尝试转义查询。

->select('IF(bodyshops.postcodes_covered is null, "No", "Yes") as match_found', FALSE)

FALSE告诉CodeIgniter将字符串保留为as-as而不是尝试向其添加反引号。在这种情况下,它不知道如何添加它们,因此它会弄乱您的查询。

P.S。您的加入需要是:

->join('bodyshops', 'bodyshops.postcodes_covered LIKE CONCAT("%",bodyshops_postcode_allocation.area_code,"%")', 'left')

如果你想要LEFT JOIN,你需要告诉它。

P.P.S。 $this->db->get('')应该只是$this->db->get()。不要传递一个空白字符串。