使用或 - 而不是查询在mysql中搜索记录

时间:2015-01-20 12:24:59

标签: mysql

我认为在看这个时我会转过身来。我正在尝试获取所有与交易项目有关的交易记录,这些交易项目具有多个ID(1或2)中的一个以及具有其他ID(3或4)的交易项目,但不包含与其他ID的交易项目( 5或6)

结构是:

=顾客=

  • ID
  • FNAME
  • L-NAME
  • 电子邮件
  • 电话

=反式=

  • ID
  • id_org
  • id_patron

= trans_item =

  • ID
  • id_trans
  • id_perf

我正在尝试以下方法:

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的顾客

2 个答案:

答案 0 :(得分:1)

您可以使用group byhaving执行此操作。基本思路是:

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来排除/包含以找到重复的方式。欢迎任何其他建议