我有一张邮局表。该表有一个字段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,我想在我的选择中从这篇文章中获取值。任何想法如何做到这一点?
答案 0 :(得分:1)
你可以left join
表格自己:
select *
from posts p
left join
posts linked
on linked.id = p.post_share
如果post_share
为null
,则无法在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