Mysql 查询对我不起作用 Codeigniter Php
Posted
技术标签:
【中文标题】Mysql 查询对我不起作用 Codeigniter Php【英文标题】:Mysql query not working for me Codeigniter Php 【发布时间】:2019-07-24 20:01:19 【问题描述】:我正在使用带有 codeigniter 的 mysql,h这是我的表结构:
表 A:
id(doctorid) name
-----------------------------
1 abc
2 xyz
3 ahd
4 djd
表 B:
id doctor_id type
-------------------------------------
1 1 Nuter
2 3 Spay
现在我想获取所有类型的医生记录,我想要以下结果:
id name Nuter Spay
---------------------------------------
1 abc 1 0
2 xyz 0 Spay
我尝试使用以下代码但不适合我,我该怎么做?
$this->db->select('A.*');
$this->db->from('A');
$this->db->join('B', 'B.doctor_id = (SELECT COUNT(Type) FROM B )');
$query = $this->db->get();
【问题讨论】:
连接条件好像不对。 【参考方案1】:试试这个代码:
$this->db->select('A.*,B.type');
$this->db->from('A');
$this->db->join('B', 'B.doctor_id = A.id');
$query = $this->db->get();
【讨论】:
【参考方案2】:您似乎正在寻找条件聚合。
在纯 SQL 中,查询应如下所示:
SELECT
A.id,
A.name,
SUM(CASE WHEN B.type = 'Nuter' THEN 1 ELSE 0 END) as Nuter,
SUM(CASE WHEN B.type = 'Spay' THEN 1 ELSE 0 END) as Spay
FROM A
INNER JOIN B ON B.doctor_id = A.id
GROUP BY A.id, A.name
如果表 A 和 B 之间存在 1-1 关系而不是 1-N(如您的示例数据所示),则可以将其简化为:
SELECT
A.id,
A.name,
CASE WHEN B.type = 'Nuter' THEN 1 ELSE 0 END as Nuter,
CASE WHEN B.type = 'Spay' THEN 1 ELSE 0 END as Spay
FROM A
INNER JOIN B ON B.doctor_id = A.id
试试:
$this->db->select(
"A.id,
A.name,
CASE WHEN B.type = 'Nuter' THEN 1 ELSE 0 END as Nuter,
CASE WHEN B.type = 'Spay' THEN 1 ELSE 0 END as Spay"
);
$this->db->from('A');
$this->db->join('B', 'B.doctor_id = A.id');
$query = $this->db->get();
【讨论】:
以上是关于Mysql 查询对我不起作用 Codeigniter Php的主要内容,如果未能解决你的问题,请参考以下文章