2015-06-09 88 views
5

我很难计算它找到一个新的personnel_id计划,但忽略它是否会再次发现相同的personnel_id。PHP Count MySQL值并忽略重复

personnel_id 24下周在A楼和B楼,但只计为1,因为这是同一个人。

最后我会做一些像$result = $totalpersonnel_id_tablepersonnel - $totalpersonnel_id_tableplanning这会给我一个像7这样的数字意味着7名员工没有受到影响。

我觉得这是我想要的正确的查询:

$test=mysql_query("SELECT COUNT(DISTINCT personnel_id) AS numberpid 
FROM planning WHERE personnel_id!='' GROUP BY personnel_id HAVING 
COUNT(personnel_id) > 1"); 

我没有找到如何从这个查询得到的总和。

回答

0

找到了解决办法:

$result=mysql_query("SELECT COUNT(*) AS numberpid FROM planning WHERE personnel_id!='' GROUP BY personnel_id"); $howmany=mysql_num_rows($result);

感谢您的帮助!

1

如果personnel_id!=“”的意思是NOT NULL使用personnel_id IS NOT NULL,而不是等查询编辑下面

SELECT COUNT(DISTINCT personnel_id) AS numberpid 
FROM planning WHERE personnel_id IS NOT NULL 
GROUP BY personnel_id 
HAVING numberpid > 1 
+0

我现在已经测试了你的解决方案,它没有返回PhpMyAdmin的结果。我认为这是因为它在HAVING中缺少COUNT。如果我添加HAVING count(numberpid) > 1,我会得到numberpid = 1的列表。这看起来是正确的,但有一个** mysql_result **或其他的东西COUNT所有这些numberpid = 1显示?也许一个

while
要做?我有点迷路 – BackTrack57

0

,你将需要使用子查询过滤,分组和计数后,其使用numberpid> 1通过personnel_id,并在parrent查询中过滤计数。

SELECT personnel_id, numberpid 
FROM (
    SELECT count(personnel_id) as numberpid, personnel_id 
    FROM palnning 
    WHERE personnel_id!='' 
    GROUP BY personnel_id) as tmp_table 
WHERE numberpid > 1 
+0

该查询显示** numberpid = 2 **的personnel_id列表。是你的方法去除** numberpid = 2 **的数量吗?例如显示3 numberpid = 2然后'$ totalpersonnel_id_tableplanning - 3' =正确的结果? – BackTrack57

+0

嗨,不知道我理解你的问题。查询返回的结果是:personnel_id(你试图过滤的id), – Auris

+0

对不起。嗨,不知道我理解你的问题。查询返回的结果是:personnel_id(您正在测试筛选的id),numberpid(找到多少条该id的条目,用于筛选大于1的条目,就像在初始查询中那样)。如果你想计算你有多少个唯一条目,把父查询的'SELECT count(personnel_id)改为total_unique',这会给你提到多于一次的唯一'personnel_id'的总数。 (如果您想删除“超过1次”的过滤器,只需删除父查询的WHERE部分即可。 – Auris