MySQL - 可以像这样使用COUNT,GROUP BY和JOIN吗?

时间:2017-03-24 22:07:17

标签: mysql database

以下是我的一张桌子,名为board。

id int unsigned not null primary key auto_increment,
board_name varchar(10) not null,
type varchar(10) not null,
article_id int unsigned,
title varchar(255) not null,
content text not null

两种类型的数据存储在该表,文章和回复中 只有回复类型有一个article_id; article type在article_id中只有一个空值。

我想做的是:
1.计算每篇文章的答复数量 2.获取1的前5篇文章的信息(标题和内容)。

我可以像这样算1:

select article_id, count(*) as count from board 
where article_id is not null group by article_id order by count desc limit 5;

+------------+-------+
| article_id | count |
+------------+-------+
|         12 |     7 |
|          3 |     5 |
|          6 |     3 |
|         11 |     2 |
|          1 |     1 |
+------------+-------+

现在,我知道前5篇文章的身份 但我不知道如何使用这些ID来获取文章的信息 我搜索并发现有一个连接函数,但是我可以将它用于同一个表吗?
我期望的结果是:

+------------+-------+-------+---------+
| article_id | count | title | content |
+------------+-------+-------+---------+
|         12 |     7 |       |         |
|          3 |     5 |       |         |
|          6 |     3 |       |         |
|         11 |     2 |       |         |
|          1 |     1 |       |         |
+------------+-------+-------+---------+

或者我应该找到其他方法吗?

2 个答案:

答案 0 :(得分:0)

您可以自己加入表格。但是您需要使用表别名并将其用作列名的前缀。

select a.*, count(*) as count 
from board as r -- r is alias (reply)
join board as a on a.id = r.article.id
where r.article_id is not null
group by r.article_id
order by count desc
limit 5;

答案 1 :(得分:0)

我能够在一段时间内在一个项目上实现这样的调用。你要做的是在一个连接中嵌入一个调用(见下文)。

SELECT b.title, b.content, b.article_id, b2.count 
FROM board b
LEFT JOIN (
    SELECT article_id, COUNT(id) AS count
    FROM board
    WHERE article_id IS NOT null
    GROUP BY article_id
) b2 ON b2.article_id = b.id
ORDER BY b2.count DESC
LIMIT 5;