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

Php 如何使用codeigniter框架进行SQL查询,php,mysql,sql,codeigniter,mariadb,Php,Mysql,Sql,Codeigniter,Mariadb,如何使用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_f

如何使用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查询生成器。我不熟悉排序方法的要求。我更喜欢编写需要提交到数据库的SQL。我更喜欢限定所有列引用,例如,作为一种好处,未来可能不太熟悉数据库模式的读者,哪些列来自哪些表,以及两个,以防止在将同名列添加到另一个表时,我的SQL因“不明确的列”引用而中断

  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');
如果我观察到这“不起作用”,并且我在StackOverflow上发布了一个问题,我会包括一些关于我观察到的实际行为的信息,特别是返回的任何错误消息


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

“不起作用”没有传达有关您正在观察的行为的任何真实信息。是返回错误消息?还是返回意外的结果集?显示的SQL查询包含双引号…这些应该是封闭列引用,还是应该是字符串文本?此外,列引用不合格,我们可以“不知道哪个表包含哪些列,即,
`mes`
。我不明白什么是
+“APLICAO\u FLUROR”+“EXCENTICAO\u placa”+“polimento\u protese”
应该是doPlus您有一个GROUP BY子句,但没有聚合函数-这在查询生成器代码中没有什么意义,我看不到
cronograma\u preventivo
在哪里被引用为行源。(我没有看到cronograma\u preventivo中的
)@草莓:GROUP BY包含选择列表中的所有表达式,因此它将删除重复的表达式,相当于
SELECT DISTINCT
。(我仍然不知道OP观察到了什么行为,或者OP试图实现什么。和你一样,我也不知道
sql\u模式
是否包括
ANSI\u引号
。那么这些双引号是用来括住字符串文字,还是用来括住列引用?)这是列值的总和,我需要返回“nome_paciente”,其中列的总和不同于0。