关于mysql 求解$$

失落的神庙 2016-03-24 01:43:32
是做一个关于日志和评论的接口 仿微信朋友圈

现在的问题是
日志表a 评论表b
a查询10条日志
然后要查询这10条日志对应的最新的3条评论。
不会是要循环去查询吧?
表设计大概如下
表a
aid 主键
acontent 内容
表b
bid 主键
baid 对应的日志id
bcontent 评论内容
btime 评论时间

目前用的查询所有对应评论sql如下
select * from a left join b on b.baid=a.aid limit 10

那么如何取最新3条评论呢?跪求解惑。

...全文
271 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落的神庙 2016-03-24
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
select uj_id, uj_content,ujc_id, ujc_time
 from user_journal_tb a
   left join
    (select * from user_journal_comment_tb t
      where 2 > 
       (select count(*) from user_journal_comment_tb
         where t.ujc_uj_id=ujc_uj_id and t.ujc_id>ujc_id)
       order by ujc_time desc
    ) b
 on a.uj_id=b.ujc_uj_id

由于数据较少,我改成了 每条日志的最新2条评论 你自己验证一下
3q
xuzuning 2016-03-24
  • 打赏
  • 举报
回复
select uj_id, uj_content,ujc_id, ujc_time
from user_journal_tb a
left join
(select * from user_journal_comment_tb t
where 2 >
(select count(*) from user_journal_comment_tb
where t.ujc_uj_id=ujc_uj_id and t.ujc_id>ujc_id)
order by ujc_time desc
) b
on a.uj_id=b.ujc_uj_id


由于数据较少,我改成了 每条日志的最新2条评论
你自己验证一下
  • 打赏
  • 举报
回复
直接通过sql想不出来,不过可以在程序里面先取出你要的a表的id集合,然后按id集合遍历拼接sql,其实跟你说的遍历无差别,只不过是组织成一句sql通过union来一次查询
失落的神庙 2016-03-24
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
直接通过sql想不出来,不过可以在程序里面先取出你要的a表的id集合,然后按id集合遍历拼接sql,其实跟你说的遍历无差别,只不过是组织成一句sql通过union来一次查询
奥。
失落的神庙 2016-03-24
  • 打赏
  • 举报
回复

//目前用的
SELECT uj.uj_id,uj.uj_content,ujc.ujc_content FROM user_journal_tb as uj LEFT JOIN user_journal_comment_tb as ujc on ujc.ujc_uj_id=uj.uj_id



好像很多都不能实现。比如查3篇 前3条评论
应该如下图


失落的神庙 2016-03-24
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
是总共三条最新评论,还是对每个内容的三条最新评论? 另外 SQL 指令总是要测试一下的 你应该给些测试数据,让我自己构造也太麻烦点了吧
感谢关注。已上sql 是要查询每条日志的最新3条评论
失落的神庙 2016-03-24
  • 打赏
  • 举报
回复


-- ----------------------------
-- Table structure for `user_journal_tb`
-- ----------------------------
DROP TABLE IF EXISTS `user_journal_tb`;
CREATE TABLE `user_journal_tb` (
  `uj_id` int(11) NOT NULL AUTO_INCREMENT,
  `uj_content` text NOT NULL COMMENT '内容',
  `uj_u_id` int(11) NOT NULL COMMENT '所属用户id 对应表(user_tb)中 u_id',
  `uj_img1` varchar(500) DEFAULT NULL COMMENT '图片1',
  `uj_img2` varchar(500) DEFAULT NULL COMMENT '图片2',
  `uj_img3` varchar(500) DEFAULT NULL COMMENT '图片3',
  `uj_img4` varchar(500) DEFAULT NULL COMMENT '图片4',
  `uj_img5` varchar(500) DEFAULT NULL COMMENT '图片5',
  `uj_img6` varchar(500) DEFAULT NULL COMMENT '图片6',
  `uj_img7` varchar(500) DEFAULT NULL COMMENT '图片7',
  `uj_img8` varchar(500) DEFAULT NULL COMMENT '图片8',
  `uj_img9` varchar(500) DEFAULT NULL COMMENT '图片9',
  `uj_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '发布时间  自动更新(无需插入)',
  `uj_visible` int(11) NOT NULL DEFAULT '0' COMMENT '是否显示 (备用)  0不显示 1显示',
  `uj_like_num` int(11) NOT NULL DEFAULT '0' COMMENT '喜欢数 ',
  `uj_tempi` int(11) DEFAULT NULL COMMENT '备用整型',
  `uj_tempstr1` varchar(500) DEFAULT NULL COMMENT '备用字段1',
  `uj_tempstr2` varchar(500) DEFAULT NULL COMMENT '备用字段2',
  `uj_tempstr3` text COMMENT '备用字段3',
  PRIMARY KEY (`uj_id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户日志表\r\n用于保存用户发表的日志 晒单等消息';

-- ----------------------------
-- Records of user_journal_tb
-- ----------------------------
INSERT INTO `user_journal_tb` VALUES ('1', '日志1', '0', null, null, null, null, null, null, null, null, null, null, '0', '0', null, null, null, null);
INSERT INTO `user_journal_tb` VALUES ('2', '日志2', '0', null, null, null, null, null, null, null, null, null, null, '0', '0', null, null, null, null);
INSERT INTO `user_journal_tb` VALUES ('3', '日志3', '0', null, null, null, null, null, null, null, null, null, null, '0', '0', null, null, null, null);
INSERT INTO `user_journal_tb` VALUES ('4', '日志4', '0', null, null, null, null, null, null, null, null, null, null, '0', '0', null, null, null, null);
INSERT INTO `user_journal_tb` VALUES ('5', '日志5', '0', null, null, null, null, null, null, null, null, null, null, '0', '0', null, null, null, null);

DROP TABLE IF EXISTS `user_journal_comment_tb`;
CREATE TABLE `user_journal_comment_tb` (
  `ujc_id` int(11) NOT NULL AUTO_INCREMENT,
  `ujc_uj_id` int(11) NOT NULL COMMENT '评论的日志id 对应表(user_journal_tb) 中uj_id',
  `ujc_u_id` int(11) NOT NULL COMMENT '用户id 对应表(user_tb) 中u_id',
  `ujc_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '评论时间  自动更新(无需插入)',
  `ujc_visible` int(11) NOT NULL DEFAULT '0' COMMENT '是否显示 (备用)  0不显示 1显示',
  `ujc_content` text COMMENT '评论内容',
  `ujc_tempi` int(11) DEFAULT NULL COMMENT '备用整型',
  `ujc_tempstr1` varchar(500) DEFAULT NULL COMMENT '备用字段1',
  `ujc_tempstr2` varchar(500) DEFAULT NULL COMMENT '备用字段2',
  `ujc_tempstr3` text COMMENT '备用字段3',
  PRIMARY KEY (`ujc_id`),
  UNIQUE KEY `ujid_uid_unique` (`ujc_uj_id`,`ujc_u_id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='日志评论表\r\n用于存储用户评论日志的内容时间等信息';

-- ----------------------------
-- Records of user_journal_comment_tb
-- ----------------------------
INSERT INTO `user_journal_comment_tb` VALUES ('1', '1', '12', '2016-03-24 13:29:51', '0', '1_1111', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('2', '1', '13', '2016-03-24 13:29:47', '0', '1_222', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('3', '1', '14', '2016-03-24 13:29:40', '0', '1_333', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('4', '2', '3', null, '0', '2_111', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('5', '2', '41', null, '0', '2_222', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('6', '2', '332', null, '0', '2_333', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('7', '2', '321', null, '0', '2_444', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('8', '3', '3', null, '0', '3_111', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('9', '3', '2', null, '0', '3_222', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('10', '3', '4', null, '0', '3_333', null, null, null, null);
INSERT INTO `user_journal_comment_tb` VALUES ('11', '4', '5', '2016-03-24 13:33:02', '0', '4_111', null, null, null, null);

xuzuning 2016-03-24
  • 打赏
  • 举报
回复
是总共三条最新评论,还是对每个内容的三条最新评论? 另外 SQL 指令总是要测试一下的 你应该给些测试数据,让我自己构造也太麻烦点了吧

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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