【发布时间】:2015-02-14 11:23:56
【问题描述】:
表 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 与其他用户共享的产品记录。您可以在访问控制表中查看。
现在产品与他人共享,因此用户将能够在他们的屏幕上看到与他们共享的产品。
我们在屏幕上有 2 个标签 -> 共享和出价。
共享 -> 用户将在此处看到与他们共享但尚未对产品出价的产品。一旦用户对任何产品出价,我们就会在上面显示的出价表中输入。
投标 -> 用户将在这里看到他们投标的产品。
我们的查询:-
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 的状态和可见性标准不匹配。但是上面的查询给了我 PRODUCT 2 和 3 都错了。
我们正在使用 3 个表格来获取数据并寻求专家的帮助来指导。
注意 - 我们必须检查 2 件我们无法在查询中做的重要事情,即用户不得出价并由产品创建者与用户共享。
【问题讨论】:
标签: mysql subquery inner-join