请教多表联查的问题

cscscsdn 2017-05-27 10:36:26

评论表:
CREATE TABLE `comment` (

`id` int(11) NOT NULL,
`content` varchar(512) DEFAULT NULL COMMENT '评论内容',
`created` datetime DEFAULT NULL COMMENT '创建时间',
`is_show` bit(1) DEFAULT NULL COMMENT '是否显示,用于评论审核',
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
`comment_type` varchar(255) DEFAULT NULL COMMENT '评论类型,用来区分评论的是音乐表还是咨询表等',
`comment_id` int(11) DEFAULT NULL COMMENT '针对哪条内容做的评论',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='评论表,需要其他字段自己添加';

-- ----------------------------
-- 资讯表
-- ----------------------------
DROP TABLE IF EXISTS `consult`;
CREATE TABLE `consult` (
`id` int(11) NOT NULL,
‘title’ varchar(255) DEFAULT NULL ,
`content` varchar(255) DEFAULT NULL COMMENT '资讯内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='资讯表';

-- ----------------------------
-- 音乐表
-- ----------------------------
DROP TABLE IF EXISTS `music`;
CREATE TABLE `music` (
`id` int(11) NOT NULL,
`music_name` varchar(255) DEFAULT NULL COMMENT '音乐名称',
`author_word` varchar(255) DEFAULT NULL COMMENT '词作者',
`author_music` varchar(255) DEFAULT NULL COMMENT '曲作者',
`sing_artist` varchar(255) DEFAULT NULL COMMENT '演唱者',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='音乐表,需要其他字段自己添加';

-- ----------------------------
-- 用户表
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`nice_name` varchar(255) DEFAULT NULL COMMENT '昵称',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`telphone` varchar(255) DEFAULT NULL COMMENT '电话',
`birthday` date DEFAULT NULL COMMENT '生日',
`gender` bit(1) DEFAULT NULL COMMENT '性别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表


如上面的数据库表,现在有个问题,就是比如:
1.某个用户,他在个人中心里面点击“我的评论”,分页显示他的所有评论,要有评论内容,评论的东西(可能是音乐或资讯或其他)的标题和内容(部分显示)。意思就是要几表联查,评论表和音乐(或者资讯或者其他)怎么查询呢?
2.从文章要能拿到某条文章的评论集合,以及每条评论的评论者,以便显示到页面
或者怎么重新设计数据库?
...全文
165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieyueqing 2017-05-27
  • 打赏
  • 举报
回复
comment表要加索引,comment_type 改成tinyint,用数字枚举代表各种表,例如 1 资讯表;2,音乐表。 CREATE TABLE `comment` ( `id` int(11) NOT NULL, `content` varchar(512) DEFAULT NULL COMMENT '评论内容', `created` datetime DEFAULT NULL COMMENT '创建时间', `is_show` bit(1) DEFAULT NULL COMMENT '是否显示,用于评论审核', `user_id` int(11) DEFAULT NULL COMMENT '用户ID', `comment_type` tinyint DEFAULT NULL COMMENT '评论类型,用来区分评论的是音乐表还是咨询表等', `comment_id` int(11) DEFAULT NULL COMMENT '针对哪条内容做的评论', PRIMARY KEY (`id`), key(user_id), key(comment_id,comment_type) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='评论表,需要其他字段自己添加';
xieyueqing 2017-05-27
  • 打赏
  • 举报
回复
第二个: select a.id,a.content,a.created,b.nice_name from comment a inner join user b on a.user_id=b.id where a.comment_id=12121 and a.comment_type='音乐表' and a.is_show=1 order by a.id desc limit 100; -- limit 100 是返回最新一百条数据
xieyueqing 2017-05-27
  • 打赏
  • 举报
回复
第一个: select * from ( select a.id,a.content,a.created from comment a inner join consult b on a.comment_id=b.id where a.user_id=1234 and a.comment_type='资讯表' and a.is_show=1 union all select a.id,a.content,a.created from comment a inner join music b on a.comment_id=b.id where a.user_id=1234 and a.comment_type='音乐表' and a.is_show=1 ) t order by id;
cscscsdn 2017-05-27
  • 打赏
  • 举报
回复
为什么没人啊?刚来论坛提的第一个问题啊,急急急
ACMAIN_CHM 2017-05-27
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧