从表和引用表中选择列,count(id)

时间:2015-09-07 15:29:35

标签: php mysql sql

我有一个查询,我想从两个表(父表和参考表)中获取列,以及选择参考表上每个帖子的类别总数

制品

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

2 个答案:

答案 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)