表1 - >访问控制
1) user_uuid
2) product_id
3) facebook_uuid
表2 - >产品表
1) product_id
2) product_name
3) status
4) visibility
5) result
6) user_uuid
表3 - >出价表
1) product_id
2) user_uuid
3) options
示例数据
产品表: -
ID - Name - status - visibility - result - user_uuid
1 - T1 - 1 - 1 - 0 - 1
2 - T2 - 1 - 1 - 0 - 1
3 - T3 - 0 - 0 - 1 - 1
访问控制
user_uuid - product_id - facebook_uuid
1 - 1 - 123
1 - 1 - 456
1 - 1 - 789
1 - 2 - 123
1 - 2 - 456
1 - 2 - 789
1 - 3 - 123
1 - 3 - 456
1 - 3 - 789
出价表: - 最初,只要用户对产品出价,此表就不会有任何数据,只会输入此数据。
product_id - user_uuid - options
1 - 2 - 123.35
用户表: -
user_uuid - facebook_uuid
1 - 007
2 - 123
3 - 456
4 - 789
说明: -
用户1创建了3个产品并与其他Facebook用户共享。为了管理共享,我们创建了访问控制表,我们跟踪用户1与其他用户共享的产品记录。您可以在访问控制表中检查它。
现在,产品与他人共享,因此用户可以在屏幕上看到与他们共享的产品。
我们在屏幕上有两个标签 - >共享&出价。
共享 - >在这里,用户将看到与他们共享的产品,但他们尚未对产品进行出价。一旦用户对任何产品出价,我们就会在上面显示的出价表中输入。
出价 - >在这里,用户将看到他们出价的产品。
我们的查询: -
SELECT *
FROM PRODUCT TABLE
WHERE product_id IN
( SELECT product_id
from ACCESS TABLE
where facebook_uuid ='123'
and product_id not in
( Select product_id from BID TABLE)
)
or product_id IN
( SELECT product_id
from ACCESS TABLE
where user_uuid IN
( select user_uuid
from USER TABLE
where facebook_uuid = '123'
)
and product_id not in
( Select product_id from BID TABLE )
)
AND result = 0
AND status = 1
AND visibility = 1
这应该返回我的产品2,因为用户2已经为产品1和产品3状态&放置了BID。可见性标准不匹配。但上面的查询给了我PRODUCT 2& 3两者都错了。
我们正在使用3表获取数据并寻求专家的帮助来指导。
注意 - 我们必须检查2件我们无法在我们查询中无法做到的事情,用户不得与产品创建者一起向用户出价和共享。
答案 0 :(得分:1)
第一个子查询选择与给定用户共享的产品,第二个子查询选择给定用户已经出价的产品。因此查询选择产品in
第一个列表(由第一个子查询选择),not in
第二个列表(由第二个子查询选择)。
select *
from product_table
where
result=0 and
status=1 and
visibility=1 and
product_id in (
select product_id
from access_table
where facebook_uuid='123'
) and
product_id not in (
select product_id
from
bid_table join
user_table on user_table.user_uuid=bid_table.user_uuid
where facebook_uuid='123'
)