如何使用 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 语句,并将它与我想要构建的查询进行比较,然后从那里开始。
如何使用 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 语句,并将它与我想要构建的查询进行比较,然后从那里开始。