如何使用 codeigniter 框架进行 SQL 查询

How to make an SQL query with codeigniter framework

如何使用 codeigniter 进行此查询?

SELECT `nome_paciente` 
FROM `cronograma_preventivo` 
JOIN `paciente` 
ON `cronograma_preventivo`.`id_paciente` = `paciente`.`id_paciente` 
WHERE `mes` = '2016-09-01' 
AND `kit_higiene` + `raspagem` + `atendimento` + "aplicacao_fluor" + "evidenciacao_placa" + "polimento_protese" != 0
GROUP BY `nome_paciente`

我试过这个:

  $this->db->join('paciente', 'cronograma_preventivo.id_paciente = paciente.id_paciente');
  $this->db->select('nome_paciente');
  $this->db->where('mes', date('Y-m-01',strtotime("NOW")));
  $this->db->where("(kit_higiene+raspagem+atendimento+aplicacao_fluor+evidenciacao_placa+polimento_protese)>=0");
  $this->db->group_by('nome_paciente');

但这行不通:(

在我看来,查询生成器代码中缺少这样一行:

 $this->db->from('cronograma_preventivo')

我觉得

 $this->db->select()

应该,在db->from之前,应该在db->join.

之前

我只是猜测。我不使用 codeigniter Query Builder。我不熟悉订购方法的要求。我更愿意 table 制作需要提交给数据库的 SQL。而且我更喜欢 限定 所有列引用,一方面,作为一个好处,未来的读者可能不熟悉数据库模式,哪些列来自哪些 tables和两个,以防止我的 SQL 在将具有相同名称的列添加到另一个 table.

时使用 "ambiguous column" 引用中断
  SELECT p.nome_paciente
    FROM cronograma_preventivo r
    JOIN paciente p
      ON p.id_paciente = r.id_paciente
   WHERE r.mes = '2016-09-01'
     AND ( r.kit_higiene 
         + r.raspagem
         + r.atendimento
         + r.aplicacao_fluor
         + r.evidenciacao_placa
         + r.polimento_protese
         ) != 0
   GROUP BY p.nome_paciente

如果我必须将其转换为 CodeIgniter QueryBuilder,我会尝试这样的操作:

  $this->db->select('p.nome_paciente');
  $this->db->from('cronograma_preventivo r');
  $this->db->join('paciente p','p.id_paciente = r.id_paciente');
  $this->db->where('r.mes','2016-09-01');
  $this->db->where('( r.kit_higiene
         + r.raspagem
         + r.atendimento
         + r.aplicacao_fluor
         + r.evidenciacao_placa
         + r.polimento_protese
         ) != 0');
  $this->db->group_by('p.nome_paciente');

如果我观察到这样做 "not work",并且我在 Whosebug 上发布了一个问题,我会提供一些关于我观察到的实际行为的信息,尤其是任何 错误消息 返回。

如果我得到了一个意外的结果集,那么我会看一下 CodeIgniter 生成的 SQL 语句,并将它与我想要构建的查询进行比较,然后从那里开始。