从mysql_num_rows结果中获取计数

时间:2015-11-07 23:44:58

标签: php mysql

我有一个表格,可以收集派对的RSVP。填写表格(姓名)的人可以选择带客人(客人)。在通知电子邮件中,我试图准确计算RSVP的总名称和访客数量。

如果我只是获取姓名计数(填写表格的人),这很容易做到:

mysql_query($query);
$result = mysql_query("select * from tablename"); 
$rowCount = mysql_num_rows($result); 
mysql_close($link);

我只想使用$rowCount作为RSVP的总数。但我也希望将宾客包括在内。访客在表单中输入GuestFirstNameGuestLastName,并与填写表单的人员记录相同的记录。所以我尝试了这个。当我包括一位客人时它起了作用 - 它说总RSVP是2.但是当我在下次测试时没有包括客人时,它也将它计为2.这是我用于此的代码:

mysql_query($query);
$result = mysql_query("select * from tablename"); 
$result_guest = mysql_query("select * from tablename WHERE 
GuestFirstName IS NOT NULL); 
$rowCount = mysql_num_rows($result) + mysql_num_rows($result_guest) ; 
mysql_close($link);    

就像我说的,即使没有输入任何访客,此代码也会产生2个RSVP。任何帮助,将不胜感激。感谢。

cdr6800

4 个答案:

答案 0 :(得分:3)

您可以在以下单个查询中实现此目的。还尝试使用PDO或mysqli_ *函数,因为您使用的是不推荐使用的mysql_ *。

SELECT 
    COUNT(*) AS total_names,
    COUNT(CASE WHEN GuestFirstName IS NOT NULL THEN 1 END) AS total_guests
FROM tablename;

因此,如果有10个邀请行,其中只有4个有来宾,结果将为:

total_names    total_guests
10             4

答案 1 :(得分:2)

这是一种获取行数的昂贵方法:从表中的所有行中选择所有列,然后从数据库中将这些列提取到客户,只需要一个"计数"行数。

SQL提供聚合函数。例如,COUNT()可用于返回行数。

至于为什么要返回两行...

  WHERE GuestFirstName IS NOT NULL

最可能的解释是表中有两行具有分配给GuestFirstName列的非NULL值。它可以是空的(零长度字符串),不被视为NULL。考虑

  SELECT '' IS NULL       -- 0 (false)
       , '' IS NOT NULL   -- 1 (true)     

我想你可能也想从GuestFirstName等于空字符串的count行中排除。

PHP mysql_扩展程序已弃用,将在以后的版本中删除。有两种合适的替代品: PDO mysqli

并使用返回带有行数的单行的查询。这比返回整个表更有效,只是为了得到一个计数。

一次性完成数据。对于包含Guest的行,将计数增加2,否则将计数增加1.使用SUM()聚合,表达式返回2或1.

例如:

SELECT SUM(IF(t.GuestFirstName<>'',2,1)) AS total_including_guests
     , SUM(1) AS count_rsvp
  FROM mytable t

答案 2 :(得分:0)

可能Guest Name的值为空(但不为null)。尝试:

$result_guest = mysql_query( select * from tablename 
    WHERE GuestFirstName IS NOT NULL 
    AND GuestFirstName != '');

答案 3 :(得分:0)

使用SUM()

,您实际上可以使用一个查询而不是其他逻辑来执行此操作
SELECT SUM(IF(GuestFirstName IS NULL, 1, 2)) AS totalGuests FROM tablename;

这将迭代所有行,并总结1(如果此行中有1位客人来)或2(如果&#34;主要&#34;客人+他的邀请即将到来)