gpt4 book ai didi

mysql - 数据库重新设计或复杂的 4 路连接查询

转载 作者:行者123 更新时间:2023-11-29 03:07:55 24 4
gpt4 key购买 nike

我有一个应用程序,用户可以在其中将他们购买的东西添加到他们的帐户中。他们创建了一个列表名称,例如我的 ebay 购买,然后添加他们过去购买的东西。

当他们创建列表时,他们可以选择是否公开,这就是我苦苦挣扎的地方。

我需要显示产品列表以及谁将它们列在哪个列表中,但是,如果它们被列在私有(private)列表中,则将用户名显示为私有(private),将列表名称显示为私有(private)

4 个表:

产品

prod_id    store_name   product    user_id
------- --------- ------- -------
1 ebay chair 1002
2 amazon desk 1000
3 ebay lamp 1001

用户

user_id    name
------- -------
1000 john
1001 mark
1002 sue

user_onto_list

user_onto_list_id    user_id      list_id
------- --------- -------
1 1000 11
2 1001 12
3 1002 10

列表详细信息

list_id    visibility    list_name
------- ------- ---------
10 open myEbayList
11 open myAmazonList
12 private myPrivateList

所以结果是:

product    listed_by    list_name
------- --------- ---------
chair sue myEbayList
desk john myAmazonList
lamp PRIVATE PRIVATE

这是否可以在一个查询中实现,或者您是否会重新设计数据的存储方式以使其更简单?我宁愿保持这样,所以如果例如 sue 决定在任何时候将她的 myEbatList 设为私有(private),产品将不会显示为她列出的,而 mark 可能会决定公开他的列表。

感谢建议

最佳答案

select
p.product
, case when ld.visibility = 'private' then
'PRIVATE'
else
u.name
end as listed_by
, case when ld.visibility = 'private' then
'PRIVATE'
else
ld.list_name
end as listed_name
from products p

inner join users u on u.ser_id = p.user_id
inner join user_onto_list uol on uol.user_id = u.user_id
inner join list_detail ld on ld.list_id = uol.list_id

编辑:我在 CASE 语句中包含了有关隐私的逻辑作为 SELECT 的一部分,因为这不会干扰 JOIN 标准,它只是显示信息。或者,您可以将该逻辑构建到派生表中的某种 UNION 结构中,然后加入到该结构中,但这可能效率较低。

关于mysql - 数据库重新设计或复杂的 4 路连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com