如果post_share不为null,则获取另一个帖子值

时间:2018-03-25 13:27:26

标签: mysql sql mysqli

我有一张邮局表。该表有一个字段post_share。默认为空。 仅当用户共享帖子(带有帖子ID)时,它才有值。

`posts` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user` int(11) UNSIGNED NOT NULL,
  `text` text,
  `data` datetime NOT NULL,
  `ip` varchar(20),
  `post_share` int(11) UNSIGNED,
  PRIMARY KEY (`id`)
)

我有一个选择来获取帖子:

select c.nome, p.foto, c.user, p.user, p.id, p.data, p.text, pp.foto from posts p 
join users c on p.user=c.id 
left join profile_picture pp on p.user = pp.user
group by p.id
order by p.id desc limit 50

我得到了这个值:

c.nome, p.foto, c.user, p.user, p.id, p.data, p.text, pp.foto

我想做的是得到类似的东西:

c.nome, p.foto, c.user, p.user, p.id, p.data, p.text, pp.foto, shared_post_text (the text from the post user is sharing - post_share id value), shared_post_user, shared_post_profile_picture, shared_post_date.

总而言之,如果表帖子中的字段post_share为null,则此shared_将为null,但如果它具有id,则它们将具有另一个post值。如果post_share有一个id,我想在我的选择中从这篇文章中获取值。任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:1)

你可以left join表格自己:

select  *
from    posts p 
left join
        posts linked
on      linked.id = p.post_share

如果post_sharenull,则无法在posts表格中找到结果。遗漏的left join会返回包含所有null列的单行。

答案 1 :(得分:1)

你需要这样的东西:

   select c.nome, 
          p.foto, 
          c.user, 
          p.user, 
          p.id, 
          p.data, 
          p.text, 
          pp.foto,
          sp.text share_post_text,
          su.user shared_post_user, 
          spp.foto shared_post_profile_picture, 
          ss.date shared_post_date
     from posts p 
     join users c 
       on p.user=c.id 
left join profile_picture pp 
       on p.user = pp.user
left join posts sp
       on p.post_share= sp.id
left join users su
       on sp.user = su.id
left join profile_picture spp 
       on sp.user = spp.user
 group by c.nome, 
          p.foto, 
          c.user, 
          p.user, 
          p.id, 
          p.data, 
          p.text, 
          pp.foto,
          sp.text,
          su.user, 
          spp.foto, 
          ss.date 
    order by p.id 
     desc limit 50