PHP - MySQL IF(布尔)条件

时间:2013-07-29 22:27:58

标签: php mysql sql normalization

抱歉,我不知道如何标题这个问题,但我会尽力解释我的问题。我的数据库中有两个表格如下:

APPLICATIONS:

app_id | data1 | data2
----------------------

1      | foo   | foo
2      | bar   | bar




APP_REQUIREMENTS:

app_id | requirement  | is_satisfied
--------------------------------------
1      | requirement1 | false
1      | requirement2 | false
2      | requirement1 | true
2      | requirement2 | true

我要做的是查询我的数据库以获取APPLICATIONS表中的所有信息以及一个额外字段,该字段表示该应用程序是否有任何UNSATISFIED要求,因此我的查询将返回如下内容:

app_id | data1 | data2 | meets_all_requirements
------------------------------------------------
1      | foo   | foo   | false
2      | bar   | bar   | true

使用一个查询执行此操作的最佳方法是什么?是否有更好的方法来设置我的表/关系以适应这种情况?

非常感谢任何建议!

2 个答案:

答案 0 :(得分:2)

假设is_satisfied是一个布尔字段,那么min()在所有条件下都有效and

select a.*, min(is_satisfied) as all_satisfied
from Application a left outer join
     App_Requirements ar
     on a.app_id = ar.app_id
group by a.app_id;

如果值实际上是字符串,则可以执行以下操作:

select a.*, min(is_satisfied = 'true') as all_satisfied
from Application a left outer join
     App_Requirements ar
     on a.app_id = ar.app_id
group by a.app_id;

答案 1 :(得分:0)

select a.*, sum(not r.is_satisfied) = 0 as meets_all_requirements
from applications a
left join app_requirements r on a.app_id = r.app_id
group by a.app_id