编辑:我已经发布了db-fiddle:https://www.db-fiddle.com/f/u2Urz7fEhLtyHotNEoH8ZG/1
小提琴中的查询显示已发送请求的水管工的结果(状态ID:1)。
我将首先解释该应用程序的功能。我希望它将使它更易于理解。
有协会,有水管工。一个协会雇用水管工。 一旦协会添加了水管工,水管工就会进入我们的数据库。
一旦关联添加了管道工,其他关联可以在我们的数据库中搜索管道工并将其添加(他们可以拥有自己的管道工,其他关联可以搜索并添加)。
当协会尝试添加水管工时,水管工会收到一个请求。水管工可以接受或拒绝在协会工作的请求。水管工接受后,协会必须再次确认,或者也可以拒绝其发送的请求(在水管工接受后)。
然后有一个管道工被协会终止,并且有管道工从该协会退出。
如果水管工被终止,他只会收到通知。
当水管工试图退出关联时,关联可以接受或拒绝退出请求。
我在根据水管工的状态显示水管工列表时遇到问题(当协会搜索水管工以发送请求时)。
可能的状态是:
1)StatusId:4-水管工已经属于该关联(当前正在搜索)-不应在搜索中显示。
2)StatusId:1-已经向水管工发送了一个请求-该请求也不应显示在搜索结果中
3)StatusId:2-水管工已经接受并且尚未确认关联-不应显示
4)StatusId:3-水管工拒绝了工作请求-应该再次在搜索中显示。
5)StatusId:4-管道工接受后,关联已被接受-由于管道工现在可用于关联,因此不应显示。
6)StatusId:5-管道工接受后关联已取消-应该在搜索中再次显示
7)StatusId:6-关联终止了管道工-应再次显示以进行请求。
8)StatusId:7-水管工从关联中发送退出请求-该不应该显示
9)StatusId:8-管理员批准退出状态-应在搜索中再次显示该状态
10)StatusId:9-管理员不批准退出请求。 -不应显示
表: 编辑:我现在用以下查询发布了一个小提琴。这将显示已发送请求的水管工的结果。(状态ID:1)。
select 0 as map_id,
mp.maintenance_user_id,
mp.map_id as mp888,
m.user_id,
m.user_name,
m.customer_id,
m.association_id,
m.user_email,
m.gender,
m.contact_no,
r.role_type_name,
m.full_name,
m.work_area,
m.city,
m.contact_no,
m.address_line1,
m.address_line2,
m.state,
m.country,
m.zip_code,
mp.status_id,
v.vendor_name
from svk_apt_other_users_associations_mapping mp
left join svk_apt_maintenance_users_details m on m.maintenance_user_id = mp.maintenance_user_id and m.is_active = 1
left join svk_apt_master_user_role_type r on r.role_type_id = m.user_role_type_id and r.is_active = 1
left join svk_apt_vendors v on v.vendor_id = m.vendor_id and v.is_active = 1
left join svk_apt_associations a on a.association_id = mp.association_id and a.customer_id = mp.customer_id
and a.is_active = 1
LEFT JOIN svk_apt_other_users_associations_mapping mp4 on mp4.maintenance_user_id = m.maintenance_user_id
and m.is_active = 1
where mp.role_type_id = 8
and mp.maintenance_role_id = 1
and (case when mp.customer_id = 1 and mp.association_id = 1
then mp.status_id in(3,5,6,8)
AND
mp4.maintenance_user_id not IN(
select mp1.maintenance_user_id
from svk_apt_other_users_associations_mapping mp1
WHERE mp1.customer_id <> 1
and mp1.association_id <> 1
AND mp1.maintenance_user_id not IN
(
SELECT mp2.maintenance_user_id
FROM svk_apt_other_users_associations_mapping mp2
WHERE mp2.customer_id = 1
and mp2.association_id = 1
and mp2.status_id NOT IN(3,5,6,8)
)
)
else
false
end)
and mp.is_active = 1
and mp4.status_id is null
GROUP BY m.maintenance_user_id
UNION ALL
select 0 as map_id,
mp.maintenance_user_id,
mp.map_id as mp888,
m.user_id,
m.user_name,
m.customer_id,
m.association_id,
m.user_email,
m.gender,
m.contact_no,
r.role_type_name,
m.full_name,
m.work_area,
m.city,
m.contact_no,
m.address_line1,
m.address_line2,
m.state,
m.country,
m.zip_code,
mp.status_id,
v.vendor_name
from svk_apt_other_users_associations_mapping mp
left join svk_apt_maintenance_users_details m on m.maintenance_user_id = mp.maintenance_user_id and m.is_active = 1
left join svk_apt_master_user_role_type r on r.role_type_id = m.user_role_type_id and r.is_active = 1
left join svk_apt_vendors v on v.vendor_id = m.vendor_id and v.is_active = 1
left join svk_apt_associations a on a.association_id = mp.association_id and a.customer_id = mp.customer_id
and a.is_active = 1
where mp.role_type_id = 8
and mp.maintenance_role_id = 1
and (case when mp.customer_id <> 1 and mp.association_id <> 1
then mp.status_id in(3,5,6,8)
OR
mp.maintenance_user_id IN(
select mp1.maintenance_user_id
from svk_apt_other_users_associations_mapping mp1
WHERE mp1.customer_id <> 1
and mp1.association_id <> 1
AND mp1.maintenance_user_id not IN
(
SELECT mp2.maintenance_user_id
FROM svk_apt_other_users_associations_mapping mp2
WHERE mp2.customer_id = 1
and mp2.association_id = 1
and mp2.status_id NOT IN(3,5,6,8)
)
)
else
false
end)
and mp.is_active = 1
GROUP BY m.maintenance_user_id;