我有一个表格,可以收集派对的RSVP。填写表格(姓名)的人可以选择带客人(客人)。在通知电子邮件中,我试图准确计算RSVP的总名称和访客数量。
如果我只是获取姓名计数(填写表格的人),这很容易做到:
mysql_query($query);
$result = mysql_query("select * from tablename");
$rowCount = mysql_num_rows($result);
mysql_close($link);
我只想使用$rowCount
作为RSVP的总数。但我也希望将宾客包括在内。访客在表单中输入GuestFirstName
和GuestLastName
,并与填写表单的人员记录相同的记录。所以我尝试了这个。当我包括一位客人时它起了作用 - 它说总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
和
答案 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;客人+他的邀请即将到来)