如何在一个查询中进行多次计数/存在?

时间:2015-09-09 03:55:01

标签: mysql sql

我正在努力弄清楚如何在不对mysql进行两次调用的情况下从一个表中检查两件事情。

我有一张<form name="htmlform" method="post" action="form_process2.php"> <input type="checkbox" name="services[]" value="Ecomtek" />&nbsp;Ecomtek<br /> <input type="checkbox" name="services[]" value="E-Payroll" />&nbsp;E-Payroll<br /> <input type="checkbox" name="services[]" value="Humana" />&nbsp;Humana<br /> <input type="checkbox" name="services[]" value="John Conti" />&nbsp;John Conti<br /> <input type="checkbox" name="services[]" value="Kentucky RX Card" />&nbsp;Kentucky RX Card<br /> <input type="checkbox" name="services[]" value="Lifelock" />&nbsp;Lifelock<br /> <input type="checkbox" name="services[]" value="Logans" />&nbsp;Logan's<br /> <input type="checkbox" name="services[]" value="Norton Healthcare" />&nbsp;Norton Healthcare<br /> <input type="checkbox" name="services[]" value="Office Depot" />&nbsp;Office Depot<br /> <input type="checkbox" name="services[]" value="ProWaste" />&nbsp;ProWaste<br /> <input type="checkbox" name="services[]" value="Thorntons" />&nbsp;Thorntons<br /> <label for="firstname">*FirstName</label> <input type="text" name="firstname" maxlength="150" size="50" class="formbox"> <label for="lastname">*Last Name</label> <input type="text" name="lastname" maxlength="150" size="50" class="formbox"> <label for="company">*Company</label> <input type="text" name="company" maxlength="150" size="50" class="form box"> <label for="email">*Email Address</label> <input type="text" name="email" maxlength="180" size="50" class="form box"> </form> 表。我想测试Members列中是否存在某个值,以及MemberID列中是否存在某个值。 <{1}}和PhoneNumber都已编入索引。

但是我正在尝试的语法有问题。例如,每个

MemberID

PhoneNumber

的工作原理。为什么他们不能以某种方式结合起来,比如

SELECT COUNT(1) AS IDExists FROM Members WHERE MemberID = '999999999999' LIMIT 1

或许,因为我只关心这个值是否出现零次,或者根本不关心

SELECT COUNT(1) AS PhoneExists FROM Members WHERE PhoneNumber = '5555555555' LIMIT 1

但是,不幸的是,即使是我的一个查询,这种语法也有问题。

有关如何完成此任务的任何建议?

2 个答案:

答案 0 :(得分:2)

您需要条件SUM

SQL FIDDLE

SELECT 
    SUM( CASE 
             WHEN PhoneNumber = '5555555555' THEN 1
             ELSE 0
         END) PhoneExists,
    SUM( CASE 
             WHEN MemberID = '999999999999' THEN 1
             ELSE 0
         END) IDExists
FROM Members

答案 1 :(得分:1)

您可以将两个工作查询组合在一起:

select a.IDExists, b.PhoneExists
from (SELECT COUNT(1) AS IDExists FROM Members WHERE MemberID = '999999999999' LIMIT 1) a,
     (SELECT COUNT(1) AS PhoneExists FROM Members WHERE PhoneNumber = '5555555555' LIMIT 1) b

虽然查询将两个结果与笛卡尔积相结合,但保证每个结果只有一行,这不会有问题。

我不确定这张桌子有多大,它有多少种索引。如果表很大,那么您可能分别在列MemberIDPhoneNumber上有索引,那么上面的查询将快速返回结果。