按部门过滤交易

时间:2013-06-13 13:22:58

标签: php mysql database

我有一个用于记录客户交易的数据库。

表(交易)的详情如下:

ID | Added-date | userid | amount | department | transaction-date | addedby
1    yyyy-mm-dd   P1001    9.78     dpt 1        yyyy-mm-dd         username
1    yyyy-mm-dd   P1023    19.78    dpt 2        yyyy-mm-dd         username
1    yyyy-mm-dd   P1021    39.78    dpt 3        yyyy-mm-dd         username
1    yyyy-mm-dd   T1501    9.78     dpt 2        yyyy-mm-dd         username

我想要做的是能够查看从未在x部门购买任何东西的所有用户。

有没有人对最佳方法有任何建议?

3 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。我喜欢OUTER JOIN / NULL支票的语法:

select distinct t.userid
from transactions t
    left join transactions t2 
        on t.userid = t2.userid and t2.department = 'Some Dept'
where t2.userid is null

DISTINCT可能需要也可能不需要 - 取决于您想要的结果。

您也可以使用NOT IN(但我已经在MySQL中看到了性能问题):

select distinct userid
from transactions
where userid not in (
    select userid
    from transactions
    where department = 'Some Dept')

答案 1 :(得分:0)

当您只有几个客户时,您可以按顺序遍历所有记录并按字段部门排序。或者您可以按现场部门对它们进行分组。例如2-dim数组:

    $sort[$department][]=$record;

然后您可以使用其他编程逻辑进行过滤。

答案 2 :(得分:0)

还有一个子查询语法:

SELECT *
FROM users
WHERE (SELECT COUNT(id) FROM transactions WHERE transactions.userid = users.id) = 0