从mysql中的多个表中获取数据

时间:2013-09-02 05:53:33

标签: mysql sql

我的目标是从以下表中获取 - 用户的唯一组名和ID,用户组的最新评论,用户组的最新“完成”文章,完成文章的总和以及文章总数。基本上是底页中的内容。

problem

到目前为止我已经设法从群组表和文章中获取数据,但我无法获得最新评论。

这是我的查询

SELECT  `groups`.`name` ,  `groups`.`id` , (

SELECT MAX(  `articles`.`written` ) 
FROM  `articles` 
WHERE  `group` =  `groups`.`id` 
AND  `articles`.`done` =  '1'
) AS latestArt, (

SELECT MAX(  `comments`.`date_added` ) 
FROM  `comments` 
WHERE  `comments`.`article_id` =  `a`.`id` 
AND  `comments`.`active` =  '1'
) AS latestComm, SUM(  `a`.`done` =  '1' ) articlesAchieved, COUNT(  `a`.`id` ) AS totalArticles
FROM  `groups` 
LEFT JOIN  `articles` AS  `a` ON  `a`.`group` =  `groups`.`id` 
LEFT JOIN  `comments` AS  `c` ON  `c`.`note_id` =  `a`.`id` 
WHERE  `groups`.`user_id` =  '6'
AND  `n`.`active` =  '1'
GROUP BY  `groups`.`id`

我也尝试通过将所有内容连接到article表来获取数据,但我也没有成功:(

1 个答案:

答案 0 :(得分:2)

更新您的查询可能如下所示

SELECT g.id group_id, g.name group_name,
       a.last_written, a.total_articles, a.total_done,
       c.last_comment
  FROM groups g LEFT JOIN 
(
    SELECT `group`, 
            MAX(CASE WHEN done = 1 THEN written END) last_written,
            COUNT(*) total_articles,
            SUM(done) total_done
      FROM articles
     WHERE active = 1
       AND user_id = 1
     GROUP BY `group`
) a 
    ON g.id = a.`group` LEFT JOIN 
(
    SELECT a.`group`,
           MAX(date_added) last_comment
      FROM commants c JOIN articles a
        ON c.article_id = a.id
     WHERE a.active = 1
       AND a.user_id = 1
     GROUP BY a.`group`
) c
    ON g.id = c.`group`
 WHERE  user_id =  1