作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 61 条记录的表,其中第一条记录是用其 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)中
最佳答案
最好更改数据结构以拥有一个联结表——每个"new"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))
关于mysql - 如何从表中获取组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235573/
我是一名优秀的程序员,十分优秀!