mysql - 如何一起选择帖子和共享帖子?

标签 mysql

我有一个系统,用户可以发帖和分享其他 friend 的帖子,比如在 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

如何将共享帖子与此选择中的帖子一起获取?有什么想法吗?

最佳答案

您可以通过简单地执行 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

关于mysql - 如何一起选择帖子和共享帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49455640/

相关文章:

mysql - 使用另一个表的行创建表的列

php - 显示 mysql 查询结果的 html 表中每行的第一个单元格中的复选框

mysql - 基于巧妙的常见查询的 SQL 移动平均线行不通

php - HTML 表单在数据库中发布正确的值(TinyINT 除外)

php - 将时间字符串转换为小数小时 PHP

php - 如果值为空,则不查询 SQL 字符串

MySQL DELETE 与 SELECT(?)

java - 将数据插入数据库 - SQLException

MYSQL:如何创建一个触发器来根据来自不同表的值计算字段值?

php - 选择获取每天的数据