我如何从表中获得组合?

时间:2015-07-05 22:23:45

标签: mysql sql

我有一张包含61条记录的表格,其中第一条是" atomic"用他们的ID识别,其他的是这样的前19条记录的组合

id  pi1 pi2 pi3
1    1
2    2
3    3
  ...
19   19
20   1  13
21   1  18
  ...
24   2  6
25   2  7
26   2  7   16

在网页中我有一个表单,用户点击与原子记录对应的按钮(例如选项2和7)。当用户提交时,后端应该考虑用户按下2和7,然后结果集应该是:

id
2
7
25

第24行不应该在结果上,因为用户没有按下它

获取基本记录,我认为这应该足够了

SELECT *
FROM table
WHERE id = 2
OR id = 7

如果按下更多选项,查询将有更多运算符。但要访问复杂的组合,我不知道如何实现它而不会因为其中一个选项出现在其中一个Pi(pi1,pi2或pi3)中而没有获得不需要的记录

1 个答案:

答案 0 :(得分:0)

最好将数据结构更改为具有联结表 - 每个“新”id一行,每个相关id一个。但是,您有三列。

我认为这是你想要的逻辑:

select t.*
from table t
where id in (2, 7) or
      (2 in (pi1, pi2, pi3) and
       7 in (pi1, pi2, pi3)
      );

但是,这也会给你id 26。排除这一点需要更多的工作。在MySQL中,这应该可以解决问题:

select t.*
from table t
where id in (2, 7) or
      ((2 in (pi1, pi2, pi3)) +
       (7 in (pi1, pi2, pi3))
      ) = ((pi1 is not null) + (pi2 is not null) + (pi3 is not null))