这可能是一个简单的问题,我已经搜索过了,但不确定我想做什么的官方描述是什么…
我有一张表格,记录了建筑物的详细信息,有列记录,是否或没有记录,比如宽带、电话等…
我正在尝试构建一个返回每个值的查询,有点像一个报告,但我想保留不为每个值运行单独查询的地方(记住DRY!)。
如果我知道我在寻找"是"、"否"或"未记录",是否可以执行一个查询来分别返回所有3个值?
我目前只知道如何返回单个值,我不想创建一个充满重复代码的页面!
表:网站(原谅糟糕的布局!)
:ID--站点----------------BBAND----电话
:1-车站房屋-----是--------是
:2---德雷克斯大厦---是--------否
:3-避暑山庄----否---------------是
:4---展望之家---是--------是
当前代码是(我不知道如何进行多次计数):
$result=mysql_query("SELECT count(*) as bband from sites WHERE bband = 'Yes'");
$data=mysql_fetch_assoc($result);
echo "Broadband Yes:";
echo $data['bband'];
然后,我必须重复这个代码,表示"否",然后再次表示"未录制"。那个方法是错误的,因为它效率很低。
理想情况下,我希望能够回显/打印单个结果,这样我就可以将它们添加到表/布局中。
SELECT SUM(val = 'no')as count_no, SUM(val='yes') as count_yes, SUM(val='not') as count_not FROM...
如果val等于"no",则val="no"等于1;如果不等于,则等于0。因此,使用SUM(val='no')可以计算val='no]的情况。因此,您可以"计数"不同的val=片段,而无需将其放在sql语句的WHERE部分。
我想你正在寻找这样的东西:
SELECT *, COUNT(CASE WHEN value="yes" THEN 1 END) AS 'total_yes',
COUNT(CASE WHEN value="no" THEN 1 END) AS 'total_no',
COUNT(CASE WHEN value="not recorded" THEN 1 END) AS 'total_not_recorded'
FROM myTable