Postgresql中的动态大小写



我有一个对话列表,来自多个页面,如下:

[
{
"id": 1,
"page_id": 1,
"name": "name 1",
"assigned_user_ids": ["user1"]
},
{
"id": 2,
"page_id": 2,
"name": "name 2",
"assigned_user_ids": ["user2"]
},
{
"id": 3,
"page_id": 1,
"name": "name 3",
"assigned_user_ids": ["user2"]
},
{
"id": 4,
"page_id": 2,
"name": "name 4",
"assigned_user_ids": ["user1"]
}
]

想象"用户1"调用查询,用户1可以得到page_id = 1的所有项(因为用户1是管理员),但在page_id = 2中,他/她只获取已经分配给的项,在本例中为id = 4的item。

所以当用户1查询时,我想接收到的是:

[
{
"id": 1,
"page_id": 1,
"name": "name 1",
"assigned_user_ids": ["user1"]
},
{
"id": 3,
"page_id": 1,
"name": "name 3",
"assigned_user_ids": ["user2"]
},
{
"id": 4,
"page_id": 2,
"name": "name 4",
"assigned_user_ids": ["user1"]
}
]

这是我现有的SQL查询看起来像:

SELECT * FROM Conversations
WHERE PageId IN (1, 2)

谁能告诉我如何修改我的SQL来解决我的问题?

非常感谢!

您可以使用OR,它将给您第一页上的内容,因此从那里开始的所有内容,或者已分配给userId 1的所有内容。因此,实际上只有在其他页面上分配的内容。

SELECT * FROM Conversations
WHERE PageId = 1 OR userId = 1

如果您想将此限制为仅用于某些页面,您仍然可以使用IN

SELECT * FROM Conversations
WHERE PageId = 1 OR userId = 1 AND pageId IN (2,3,4)