mysql 查询商品的同时另外只查出一条该商品对应的评论

商品表

  id:商品id
  name:商品名称
  price:商品价格
  

商品评论表

 id:评论id
 gid:商品id
 comment:评论内容
 addtime:评论时间

现在有个商品列表,要实现如下功能

 查出来多个商品,同时每个商品只查出来一条最新的评论     

想知道怎么写效率更高,不要先查出来所有商品再循环查对应的评论 这种方法,求大神指教

阅读 4.1k
8 个回答

很少有评论列表是实时显示的都是拿的缓存数据,用脚本去更新最新数据。如果说要优化的话,

1: 可以加一张表,表示gid对应最新的一条评论ID,更新评论的时候顺便更新这张表。

2: 建立关于商品评论gid的唯一索引,速度会明显上升。

连表查。。。。。

select a.* b.id b.comment b.addtime from tableA(商品表名) a left join tableB(评论表名) b on a.id = b.gid order by b.addtime desc limit 0,1

我这里有个用户表users,文章表help_docs
sql 如下,取出所有用户,每个用户附带一个文章

select users.user_name,users.user_id ,h.title from users left join help_docs h on h.user_id = users.user_id where h.id is not null group by users.user_id 

如果想把没文章的用户也取出来把where条件去掉就好了

select g.`id`,g.`name`,c.`comment`,c.`gid` from `good` g left join `comment` c on c.`gid`=g.`id` group by g.`id` order by c.`addtime` desc

对于MySQL5.7以上的需要删掉 ONLY_FULL_GROUP_BY

select *,(select comment from tb_comment as c where c.gid=p.id limit 1) as comm from product as p; 没试过性能怎么样,你explain一下试试

敢问兄台这个问题怎么解决,我也碰到跟你一样的问题我的是多条动态下面显示2条评论

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题