问一个微信的朋友圈列表那里应是怎么个处理的

不会武功 发布于 2014/11/06 10:24
阅读 365
收藏 3

想做一个微信的朋友圈。

一共4张表

想查出如下这样的数据

发现先查了列表10条,要是想把赞,评论追加进去又要分别查10次库。这样压力好大啊。

请教一下高人。这个应怎么样处理??

数据库是mysql,语言PHP


$sql = "select f.id,f.uid,f.content,f.picture,f.comefrom,f.inputtime,u.name,u.img from pp_sports_find as f left join pp_user as u on f.uid=u.id limit 0,10";  //查出发现列表

$sql = "select count(*) as likes from pp_sports_find_like where find_id=2"; //总赞数
$sql = "select * from pp_sports_find_comment where find_id=2"; //评论列表

四张表如下:

CREATE TABLE `pp_sports_find` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(10) unsigned NOT NULL COMMENT '用户ID',
  `content` text NOT NULL COMMENT '内容',
  `picture` mediumtext COMMENT '图片地址{1.jpg|2.jpg...}',
  `comefrom` varchar(30) DEFAULT '' COMMENT '来源位置',
  `inputtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '发表时间',
  `ip` varchar(20) NOT NULL,
  `state` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态{0:不显示 1:显示}',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;


CREATE TABLE `pp_user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '0',
  `passwd` varchar(50) NOT NULL DEFAULT '0',
  `img` varchar(255) NOT NULL,
   PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE `pp_sports_find_comment` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论ID',
  `find_id` int(10) NOT NULL COMMENT '发现ID号',
  `uid` int(10) unsigned DEFAULT '0' COMMENT '用户ID',
  `to_id` int(10) DEFAULT NULL,
  `content` text COMMENT '评论内容',
  `wav` varchar(255) DEFAULT NULL COMMENT '录音',
  `wavtimes` int(11) NOT NULL DEFAULT '0' COMMENT '录间时长',
  `inputtime` int(10) DEFAULT NULL COMMENT '发布时间',
  `ip` varchar(15) DEFAULT NULL COMMENT '用户IP地址',
  `status` tinyint(1) DEFAULT '1' COMMENT '评论状态{0:未审核,-1:未通过审核,1:通过审核}',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;


CREATE TABLE `pp_sports_find_like` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `find_id` int(10) NOT NULL DEFAULT '0',
  `uid` int(10) NOT NULL DEFAULT '0',
  `inputtime` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;




加载中
0
双城记
双城记

left-join on 。。。。。这是一个很基础的sql啊。。

你这样的话就变成1-N问题了。

麻烦的其实不在这里,麻烦的是你还要考虑到必须要过滤掉不是你朋友圈里的联系人的赞与评论。。。

不会武功
不会武功
主要想把评论和赞查出来。集成到发现里面。。
0
beves
beves

3次就足够了:

1. 查帖子  2.根据帖子id用in查评论.. 注意评论的时间要限制在帖子最老的那个时间点,这样你就可省去全表查询 3.过滤 把评论里的所有uid之前的关系查出来就可以了.

不会武功
不会武功
对,这种就是最笨的方法。 要是一次查10个发现那就要跑 1,10,10 共查21次数据库
0
把妹达人老张
把妹达人老张

引用来自“beves”的评论

3次就足够了:

1. 查帖子  2.根据帖子id用in查评论.. 注意评论的时间要限制在帖子最老的那个时间点,这样你就可省去全表查询 3.过滤 把评论里的所有uid之前的关系查出来就可以了.

in数据多了,就死了。
把妹达人老张
把妹达人老张
回复 @beves : 用in效率不高。
beves
beves
数据多了还不是一样?只不过在于分裤分表和加缓存
不会武功
不会武功
是啊。我也发现这问题。所以 想看看大牛们怎么处理的。或是有没有什么比较牛B的sql函数直接用上。
0
有明丶
有明丶
直接联合查询 select * from tiezi,pinglun,zan where tiezi.id in ... And pinglun.tiezi = tiezi.id and zan.tiezi = tiezi.id
返回顶部
顶部