我有一个系统,用户可以发布帖子并与其他朋友分享帖子,例如在Facebook上。
问题是我想一起从帖子和共享帖子中获取数据,我的意思是,顺序但帖子在桌面帖子和桌面共享帖子上分享:
CREATE TABLE IF NOT EXISTS `posts` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user` int(11) UNSIGNED NOT NULL,
`titulo` text,
`data` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `share` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user` int(11) UNSIGNED NOT NULL,
`share_post_id` int(11) UNSIGNED NOT NULL,
`data` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;
我有这个选择来获取帖子:
select c.nome, c.user, p.user, p.id, p.data, p.titulo, pp.foto, count(DISTINCT likes.user) as likes_count, count(distinct comentarios.id) as comentarios_count, count(DISTINCT l2.user) as count2 from posts p
join cadastro c on p.user=c.id
left join profile_picture pp on p.user = pp.user
left join likes on likes.post = p.id
left join comentarios on comentarios.foto = p.id and comentarios.delete = 0
left join likes l2 on l2.post = p.id and l2.user = ?
group by p.id
order by p.id desc limit 20
如何与此选择中的帖子一起获得共享帖子?任何想法?
答案 0 :(得分:1)
你可以通过简单地完成union all并将缺少的列添加为NULL来实现这一点!
SELECT id,`user`,`data`,`titulo`,NULL as `share_post_id` from posts
union all
SELECT id,`user`,`data`,NULL as `titulo`,`share_post_id` from `share` order by id