Sql 按单个可空字段选择行数的正确方法?

Sql 按单个可空字段选择行数的正确方法?,sql,symfony,doctrine-orm,Sql,Symfony,Doctrine Orm,我有5个名为“status”(0..4)的字段状态。我试图找到最好的方法来计算字段的每个状态,包括0。有一个例子: table Example row 1: int id=1; string(255) content="some_content"; smallint status=1; row 2: int id=2; string(255) content="some_content"; smallint status=1; row 3: int id=3;

我有5个名为“status”(0..4)的字段状态。我试图找到最好的方法来计算字段的每个状态,包括0。有一个例子:

table Example
  row 1:
    int id=1; string(255) content="some_content"; smallint status=1;
  row 2:
    int id=2; string(255) content="some_content"; smallint status=1;
  row 3:
    int id=3; string(255) content="some_content"; smallint status=0;
  row 4:
    int id=4; string(255) content="some_content"; smallint status=4;
end
我想得到这样的结果:
$result==array(0=>0,1=>2,2=>0,3=>0,4=>1)

现在我只看到一种方法——为每个状态创建新查询,但我相信还有更好的方法。有人能帮我找到它吗?:)


谢谢你的关注

假设您有一个保存状态的表(需要显示那些具有0个匹配行的表)和另一个具有已分配状态的数据的表,标准查询将连接这些表,对结果进行分组,并统计数据表中的外观:

select st.status, count(dt.status)
from status_table st
left join data_table dt on
  st.status = dt.status
group by st.status

即使您可以从SQL返回一个数组,这也不是一个关联数组。我将在应用程序代码中处理数据库的输出(在您的例子中是PHP)。

显示示例数据。您将所有状态保存在哪里?我试图在问题正文中显示它,但我会再试一次。Sry,我糟糕的英语扭曲了我的想法。我在同一张表上有“状态”字段。但我明白你的意思,把它们放在一起是不对的。非常感谢!是的,您应该将可用状态存储在其他位置(不同的表)并使用外键引用它们。这将提供规范化,让您避免数据不一致,并且通常也让您显示那些没有发生的状态,因为如果没有这样的状态,您无法显示0行的状态,但您已经得到了-GJ:)