2012-02-07 53 views
2

我有一个数据库告诉每个系统当前和新的模型。 (每行都有系统名称,当前模型和新模型)我需要按当前模型和新模型对结果进行分组。所以如果当前和新模型是相同的我想要一个结果。我得到了这个工作,但我也需要知道每个组中有多少个系统。我怎样才能做到这一点?即时通讯使用CI查找每个GROUP BY结果中的行数

这是我的查询

$query2 = $this->db->query('SELECT * FROM rollout_systems WHERE scope_ID = '.$id.' GROUP BY EAM_Model, new_Model'); 

(EAM_Model =电流模式)

不知道如果我澄清就够了。我需要能够显示当前系统,新系统以及该组中系统的数量。

所以,如果3行有“嗒嗒”,因为当前的系统和“blahblah”,因为新的系统,我希望它说 电流:胡说 新:等等等等 数量的系统:3

+1

'SELECT * .... GROUP BY field1,field2'是无稽之谈。你想要得到什么? – JNK 2012-02-07 21:34:34

+0

在rollout_systems中有一个系统列表。每一行(系统)都有一个当前模型和一个新模型。我想这样做,如果两行或更多行具有相同的当前AND新模型,他们分组。但我也需要知道每个组中有多少行(系统) – 2012-02-07 21:39:41

+0

然后,您需要选择要查看的字段。你真的应该阅读一下聚合实际上是如何工作的。我认为你对GROUP的运作方式感到困惑 – JNK 2012-02-07 21:45:24

回答

2

它在同一个语句中做一个select *和一个group是没有意义的。你分组的列需要在你的选择中,但是你应该在你的选择中有一个像count(*)这样的聚合函数。我不知道我完全理解你正在尝试做的,但我觉得你想要的东西,如:

SELECT EAM_Model, new_Model, count(*) 
FROM rollout_systems 
WHERE scope_ID = '.$id.'    
GROUP BY EAM_Model, new_Model 
+0

但是,这样的结果会告诉我当前和新的模型以及组中的行数吗? – 2012-02-07 21:41:33

+0

是的,它会返回EAM_Model | new_Model | row_count – 2012-02-07 22:10:30

0

如果你只是想项目的数量,使用SELECT EAM_Model, new_Model, COUNT(*) FROM ...等等。当你组查询,您通常希望执行像COUNT或SUM这样的聚合,否则将数据分组是没有意义的。 (*)

0

$ query2 = $ this-> db-> query('SELECT count(*) FROM rollout_systems WHERE scope_ID ='。$ id。'GROUP BY EAM_Model,new_Model');

这是你要求的吗?

+0

不,因为那不返回EAM_Model和new_model。 – 2012-02-07 21:46:56