我有一张包含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)中而没有获得不需要的记录
答案 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))