Php 按部门筛选交易记录

Php 按部门筛选交易记录,php,mysql,database,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

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

表(交易)如下所示:

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 ID |添加日期|用户ID |金额|部门|交易日期|添加人 1 yyyy mm dd P1001 9.78 dpt 1 yyyy mm dd用户名 1 yyyy mm dd P1023 19.78 dpt 2 yyyy mm dd用户名 1 yyyy mm dd P1021 39.78 dpt 3 yyyy mm dd用户名 1 yyyy mm dd T1501 9.78 dpt 2 yyyy mm dd用户名 我想做的是能够查看所有从未在x部门购买过任何东西的用户


有人对此有什么建议吗?

有几种方法。我喜欢
外部联接的语法
/
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
可能需要,也可能不需要,这取决于您想要的结果

您也可以在中使用
(但我在MySQL中看到了这方面的性能问题):


当您只有几个客户时,您可以循环浏览所有记录,并按现场部门的顺序进行排序。也可以按现场部门对其进行分组。例如,2维阵列:

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

然后可以使用另一个编程逻辑进行过滤

还有一个子查询语法:

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

有用户表吗?或者我们只对那些没有在x部门买过东西但在其他部门买过东西的用户感兴趣吗?我想我有一个聪明的方法可以用
减去
,但MySQL不支持它。谢谢,@草莓。是的,有一个用户表,但我感兴趣的是找到只在一个部门买过东西而没有在另一个部门买过东西的用户。谢谢,非常感谢。@user2475770--np,很高兴我能帮上忙!
SELECT *
FROM users
WHERE (SELECT COUNT(id) FROM transactions WHERE transactions.userid = users.id) = 0