我有一个包含所有功能的复选框。用户选择一些功能。 如何列出所有具有所选功能的人员。
person
- id
- name
features
- id
- name
person_feature
- person_fk
- feature_fk
例如,仅具有特征1,5和9的人 不是具有特征1的人和具有特征5的人......仅具有此功能的同时
答案 0 :(得分:1)
确认...仅提供什么,或最低限度。例如:如果用户需要功能1,5,9但有些人有
(1, 2, 5, 8, 9),
(1, 5, 6, 7, 9),
(1, 5, 9, 12)...
这些都被认为是好的,因为它们具有您正在寻找的1,5和9的MINIMUM。
select
pf.person_fk,
p.name
from
person_feature pf
join person p
on pf.person_fk = p.id
group by
pf.person_fk,
p.name
having
sum( case when pf.feature_fk in ( 1, 5, 9 ) then 1 else 0 end ) >= 3
如果您只想要那些正好为3的人,只需将> =更改为just =