表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的状态和可见性标准不匹配的出价。但是上面的查询是给我的产品2和3都错了。
我们使用3表获取数据,并寻求专家的帮助,以指导。
注意-我们必须检查2件重要的事情,我们不能在我们的查询中做的是,用户不能有出价和与用户分享的产品创建者。
发布于 2014-12-16 08:45:52
第一个子查询选择与给定用户共享的产品,第二个子查询选择给定用户已经出价的产品。因此,查询选择产品,即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'
)http://www.sqlfiddle.com/#!2/d59cb/2
https://stackoverflow.com/questions/27499731
复制相似问题