将具有多行的另一个表连接到另一个表的单个结果

时间:2016-03-09 16:28:18

标签: mysql sql

我目前选择单行(帖子):

SELECT s.id AS id,s.date,s.title,s.views,s.image,s.width,s.description,u.id AS userId,u.username,u.display_name,u.avatar,
 (select count(*) from comments where item_id = s.id and type = 1) as numComments,
 (select count(*) from likes where item_id = s.id and type = 1) as numLikes,
 (select avg(value) from ratings where showcase_id = s.id) as average,
 (select count(*) from ratings where showcase_id = s.id) as total
FROM showcase AS s
INNER JOIN users AS u ON s.user_id = u.id
WHERE s.id = :id
LIMIT 5

然后在单独的查询中获得该帖子的评论:

SELECT c.id as c_id,c.text,c.date,u.id as u_id,u.username,u.display_name,u.avatar
FROM comments as c
INNER JOIN users as u ON c.user_id = u.id
WHERE item_id = :item_id AND type = :type

:id:item_id是相同的。但是,注释返回多行,而第一个查询返回一行 - 有没有办法将注释连接到第一个查询,或者当前的方式是否合适?

1 个答案:

答案 0 :(得分:0)

这实际上取决于您的申请。

如果我们讨论的是从中小型表中返回的一些记录,并且如果查询每天只执行几次,那么如果:

则无关紧要
  1. 您使用两个记录集(执行两个不同的查询 然后将他们的结果放在一起);

  2. 您加入了两个查询,从评论查询中复制每条记录的发布信息;

  3. 使用注释构建XML并将其连接到第一个查询(帖子记录)中返回的记录。

  4. 要考虑的另一个因素是帖子及其评论是否同时显示。如果不是这种情况并且评论最初不可见并且仅在点击按钮之类的某些操作之后显示,那么出于性能原因,您应该选择上面的第一个选项。

    但如果必须同时显示其评论的帖子信息,那么您应该选择上述3个选项中的一个。在建模应用程序数据结构及其数据库访问层时,哪一个更受个人喜爱。

    现在,如果数据量可能会很大,那么您应该深入挖掘并运行一些模拟来查找能够为您提供最佳性能的查询。