我有一个查询,我想从两个表(父表和参考表)中获取列,以及选择参考表上每个帖子的类别总数
制品
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
答案 0 :(得分:0)
您不需要内部查询。
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
答案 1 :(得分:0)
我会使用相关子查询重写查询
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)
。