我的表格如下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
用户只能选择每项服务一次,除了标有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,无论它是否完成。 有人能告诉我如何修改我的查询吗?
答案 0 :(得分:1)
您可以将查询与multicall
的union结合使用 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
答案 1 :(得分:0)
您有两种可用服务条件:
您只需要在查询中包含两者。第二个在where
子句中作为附加条件:
select s.*
from service s
where not exists (Select 1
from user_service_hist ush
where ush.service_id = s.id and ush.user_id = 1
) or
s.multicall = 1;