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

标签 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 表来获取数据,但我也没有成功:(

最佳答案

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

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

关于mysql - 从mysql中的多个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18566454/

相关文章:

mysql - 如何加快从两个表中搜索的 sql 查询?

php - 与 PHP 时间范围组 id 作斗争 - 开始时间,结束时间。请帮忙!

php - 从列表中获取匹配的 MySQL 行?

php - Sage 50 ODBC 使用 PHP-SQL 状态 IM002

mysql - 按时间分组,时间在 mysql 的日期列中?

php - 使用 bindParam 的 SELECT 查询不返回任何内容

mysql - sql查询前10条记录

javascript - 如果静态值有效但来自 mySQL 的动态值无效,我如何使用 Javascript 在 Chart.js 中显示 JSON 数据?

mysql复制错误

mysql - 嵌套 SQL 查询中的排序依据