如果只有所有功能,则mysql连接结果

时间:2014-05-14 13:53:18

标签: mysql sql mariadb

我有一个包含所有功能的复选框。用户选择一些功能。 如何列出所有具有所选功能的人员。

person
- id
- name

features 
- id
- name

person_feature
- person_fk
- feature_fk

例如,仅具有特征1,5和9的人 不是具有特征1的人和具有特征5的人......仅具有此功能的同时

1 个答案:

答案 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 =