2015-09-07 51 views
1

我有一個查詢,我想從兩個表(父表和參考表)中獲取列,並選擇參考上每個帖子的類別總數表從表和參考表中選擇列,計數(id)

文章

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

@GordonLinoff對不起,它已被修復。 – andychukse

回答

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 
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.pidselect列表冗餘。):articles(status, id desc)cats_rel(pid)

+0

我想獲取一個類別id(js.pid)以及總數。 – andychukse

+0

這很好,但這不是你的問題所要求的。它是在匹配時獲取'pid',相當於'cc.id'。 –