我有一个表,如下所示service
:
id | service | status | multicall | date_created |
--------------------------------------------------------------------
10 | Cleaning | 1 | 0 | 2016-09-20 19:11:01 |
11 | Gardening | 1 | 0 | 2016-09-20 19:12:07 |
12 | Dishes | 1 | 1 | 2016-09-20 19:14:28 |
13 | Take out rubbish | 1 | 1 | 2016-09-20 19:14:28 |
用户可以从该表中选择希望某人执行的服务。服务完成后,用户历史记录将保存在另一个表中user_service_hist
:
id | user_id | service_id | date_created |
--------------------------------------------------
1 | 1 | 10 | 2016-11-25 10:49:05
2 | 1 | 11 | 2016-11-27 23:58:46
3 | 1 | 12 | 2016-11-28 00:01:36
4 | 1 | 13 | 2016-11-28 12:07:17
用户只能选择各服一次EXCEPT标有服务multicall column
的价值1
。
当我调用可用服务列表时,我使用以下查询:
SELECT s.id, s.service, s.date
from service s WHERE not exists (Select 1 from user_service_hist ush
where ush.service_id = s.id AND ush.user_id = 1)
由于用户已完成所有服务,因此此查询选择零行。我想显示服务nr。12和13始终如此,因为它们的多调用列值均为1,无论它是否完成。有人可以告诉我如何修改查询吗?
您可以将查询与联合结合以进行多方通话
SELECT s.id, s.service, s.date
from service s WHERE not exists (Select 1 from user_service_hist ush
where ush.service_id = s.id AND ush.user_id = 1)
union
SELECT s.id, s.service, s.date
from service s WHERE multicall = 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句