我认为在看这个时我会转过身来。我正在尝试获取所有与交易项目有关的交易记录,这些交易项目具有多个ID(1或2)中的一个以及具有其他ID(3或4)的交易项目,但不包含与其他ID的交易项目( 5或6)
结构是:
=顾客=
=反式=
= trans_item =
我正在尝试以下方法:
SELECT
patron.email,
patron.fname,
patron.lname,
patron.phone
FROM
trans_item,
trans,
patron
WHERE
trans_item.id_perf IN (1,2)
AND
trans_item.id_perf IN (3,4)
AND
trans_item.id_perf NOT IN (5,6)
AND
trans_item.id_trans = trans.id
AND
trans.id_org = 1
AND
trans.id_patron = patron.id
GROUP BY
patron.id
ORDER BY
patron.email DESC,
patron.phone DESC
我知道说id必须是2和4总是会返回什么,但我需要让它好像id在(1,2)AND(3,4)中所以它可以是1或2但也需要在3或4
清晰度: 我试图让那些已经参加表演1或2和3或4但不是5或6的顾客
答案 0 :(得分:1)
您可以使用group by
和having
执行此操作。基本思路是:
select ti.id_trans
from trans_item ti
group by ti.id_trans
having sum(ti.id_perf in (1, 2)) > 0 and
sum(ti.id_perf in (3, 4)) > 0 and
sum(ti.id_perf in (5, 6)) = 0;
having
子句中的每个条件都会检查特定ID的行。 > 0
表示它们存在于交易中。 = 0
表示他们没有。
如果您想要其他表中的其他列,则可以加入此结果集。
答案 1 :(得分:0)
我想我有一个解决方案。如果我将所有perf的id组合在一起并通过trans_item.id对所有结果进行分组,我可以得到一个包含重复项的列表。然后我将它们转换为php多维数组,并根据每个需求的ID来排除/包含以找到重复的方式。欢迎任何其他建议