2013-07-29 4 views
0

Извините, я не был уверен, как назвать этот вопрос, но я сделаю все возможное, чтобы объяснить свою проблему. У меня есть две таблиц в моей БД, которые выглядят следующим образом:PHP - MySQL IF (логическое) состояние

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 

То, что я пытаюсь сделать, это запрос моего DB, чтобы получить всю информацию из таблицы ПРИЛОЖЕНИЙ вместе с дополнительным полем, которое представляет, есть ли какие-либо неудовлетворенные требования для этого приложения, так что мой запрос будет возвращать что-то вроде этого:

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

что бы лучший способ сделать это с помощью одного запроса? Есть ли лучший способ настроить мои таблицы/отношения для их размещения?

Любые советы приветствуются!

ответ

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; 
+0

Спасибо, это именно то, что я искал. на ваш взгляд, это лучший способ справиться с этим типом отношений 1: N? –

+0

@ A.O. Это кажется разумной структурой. –

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 
Смежные вопросы