从表和参考表中选择列、count(id)
Posted
技术标签:
【中文标题】从表和参考表中选择列、count(id)【英文标题】:Select columns, count(id) from table and reference table 【发布时间】:2015-09-07 15:29:34 【问题描述】:我有一个查询,我想从两个表(父表和参考表)中获取列,并选择参考表上每个帖子的类别总数
文章
id
title
poster
pdate
content
类别
id
name
cats_rel(具有外键约束的关系表)
id
pid
cat_id
我想获取具有一个类别 ID 和每个帖子的类别总数的帖子列表。
我用它来获取所需的数据,但速度很慢。有没有更好的方法可以更快地获得它?
SELECT cc.id, title, poster, pdate, content, js.pid, js.sno
FROM articles cc LEFT JOIN
(SELECT pid, cat_id, count(cat_id) as sno FROM cats_rel GROUP BY pid)js
ON js.pid = cc.id WHERE cc.status='approved' ORDER BY cc.id DESC
【问题讨论】:
@GordonLinoff 抱歉,已修复。 【参考方案1】:您不需要内部查询。
SELECT cc.id, title, poster, pdate, content, js.pid, count(js.cat_id) as sno
FROM articles wp
LEFT JOIN cats_rel js ON js.pid = cc.id
WHERE wp.status='approved'
group by cc.id, title, poster, pdate, content, js.pid
ORDER BY cc.id DESC
【讨论】:
【参考方案2】:我会使用相关子查询重写查询
SELECT cc.id, cc.title, cc.poster, cc.pdate, cc.content,
(SELECT COUNT(*)
FROM cats_rel js
WHERE js.pid = cc.id
) as sno
FROM articles cc
WHERE cc.status = 'approved'
ORDER BY cc.id DESC;
(看来js.pid
在select
列表中是多余的。)
对于此查询,您需要两个索引:articles(status, id desc)
和 cats_rel(pid)
。
【讨论】:
我想在总数旁边获取一个类别 ID (js.pid)。 很好,但这不是您的问题所要求的。它正在获取pid
,当有匹配时相当于cc.id
。以上是关于从表和参考表中选择列、count(id)的主要内容,如果未能解决你的问题,请参考以下文章