如何编写此SQL查询以获取批准的帖子

问题描述 投票:-1回答:1

我有3个表Users,posts和post_approval

enter image description here

现在我有一个页面,所有这些帖子都将在帖子表中显示,但是如果帖子可见性设置为私有,那么查询将签入post_approval表以查看是否针对特定用户批准了帖子状态。

因此,用户ID 2的输出将是所有3个帖子,但是用户1和3只能看到ID 1和3。

这是正确的查询吗?

SELECT * FROM posts WHERE visiblity='public' UNION (SELECT posts.* FROM POSTS RIGHT JOIN post_approval ON post_approval.post=posts.post_id WHERE post_approval.status='approved' AND post_approval.user='2')

用户ID将在上述查询中动态输入

mysql
1个回答
1
投票

简单答案

尝试此SQL语句。

SELECT * FROM Posts as p, Post_approval as pa
WHERE p.post_id = pa.post OR p.visiblity = 'public' AND user_id = 2

您从“帖子”和“帖子批准”中选择,并且仅获取与用户的帖子ID匹配的帖子。此外,您会获得所有公开可见的帖子。

长答案(联盟)

SELECT
*
FROM
(
SELECT 
  u.user_id,
  u.username,
  p.post_id,
  p.post_name,
  p.visiblity
FROM 
  Users as u,
  Posts as p
WHERE
  p.visiblity = 'public'
union ALL
SELECT 
  u.user_id,
  u.username,
  p.post_id,
  p.post_name,
  p.visiblity
FROM 
  Post_approval as a,
  Users as u,
  Posts as p
WHERE
  a.user_id = u.user_id and
  a.post = p.post_id and
  p.visiblity = 'private'
) as x
WHERE
  x.user_id = 2
© www.soinside.com 2019 - 2024. All rights reserved.