当post_share不为空时获取对应原帖子字段值的SQL实现问询
解决方案:关联原帖子数据的查询改造
你需要的是在现有查询基础上,当post_share字段不为NULL时,拉取它指向的原帖子相关信息对吧?其实只需要额外左连接一次posts表(用来关联原帖子),再按需关联原帖子对应的用户信息就可以实现。
改造后的完整查询示例
假设你需要原帖子的文本、发布时间,以及原帖子作者的名称和头像,查询可以写成这样:
SELECT -- 当前帖子发布者的信息 c.nome AS author_name, p.foto AS author_photo, p.user AS author_id, -- 当前帖子(或分享帖)的基础信息 p.id AS post_id, p.data AS post_date, p.text AS post_text, -- 原帖子的相关信息(仅当post_share不为NULL时返回有效值) original_post.text AS original_post_text, original_post.data AS original_post_date, original_user.nome AS original_author_name, original_user.foto AS original_author_photo, -- 保留你原查询中的profil表字段(请补全原关联条件) pp.foto FROM posts p -- 关联当前帖子的发布用户 JOIN users c ON p.user = c.id -- 左连接原帖子表,关联条件为post_share匹配原帖子ID LEFT JOIN posts original_post ON p.post_share = original_post.id -- 左连接原帖子的发布用户 LEFT JOIN users original_user ON original_post.user = original_user.id -- 保留你原查询中的左连接逻辑(示例补全为常见的用户关联,可替换为你的实际条件) LEFT JOIN profil pp ON c.id = pp.user_id;
关键细节说明
- 选择
LEFT JOIN而非INNER JOIN:这样即使post_share为NULL(非分享帖),当前帖子的基础信息依然能正常返回,原帖子相关字段会显示为NULL,完全贴合业务逻辑。 - 给原帖子字段加别名:比如
original_post_text,避免和当前帖子的同名字段重名导致混淆或查询错误。 - 按需调整字段:如果只需要原帖子的部分字段(比如原帖子ID、发布IP),直接在
SELECT子句中添加对应字段即可。
内容的提问来源于stack exchange,提问作者RGS
相关产品推荐
相关产品推荐

