以下是我的一张桌子,名为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 | | |
+------------+-------+-------+---------+
或者我应该找到其他方法吗?
答案 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;