2013-03-06 138 views
2

如何使用mysqli查詢循環從兩個表中選擇和計數。從兩個表中選擇和計數

下面是表結構

table1 = categories 
id | catname 
------------- 
1 | cat1 
2 | cat2 
3 | cat3 

等。

table2 = articles 
id | article | catid 
--------------------- 
1 | art1 | 2 
2 | art2 | 2 
3 | art3 | 1 
4 | art4 | 3 

我需要這顯示像

cat 1 - 1 articles 
cat 2 - 2 articles 
cat 3 - 1 articles 

任何人都可以點我如何做到這一點使用的mysqli查詢?

+0

JFYI:您的數據庫名爲mysql,不是的mysqli – 2013-03-06 13:18:21

回答

4

如果你想要這個在一列中,那麼你可以使用以下命令:

select 
    concat(c.catname, ' - ', a.Total, ' articles') list 
from categories c 
inner join 
(
    select count(*) Total, 
    catid 
    from articles 
    group by catid 
) a 
    on c.id = a.catid 

SQL Fiddle with Demo

或者你也可以做到這一點沒有子查詢:

select 
    concat(c.catname, ' - ', count(*), ' articles') list 
from categories c 
inner join articles a 
    on c.id = a.catid 
group by c.catname; 

請參閱SQL Fiddle with Demo。其結果是:

|    LIST | 
--------------------- 
| cat1 - 1 articles | 
| cat2 - 2 articles | 
| cat3 - 1 articles | 
+0

謝謝你它的偉大工程 – 2013-03-06 14:20:01

+0

@nickcruse歡迎您! – Taryn 2013-03-06 14:21:45

1

試試這個

SELECT 
    c.catname, 
    COUNT(*) 
FROM categories c 
INNER JOIN articles a 
    ON c.id = a.catid 
GROUP BY 
    c.catname 
+0

這一個我喜歡 – 2013-03-06 13:17:51

0

試試這個:

SELECT CONCAT(C.catname, ' - ', A.articles, ' Articles') 
FROM categories C 
     INNER JOIN articles A 
     ON C.id = A.catid 
GROUP BY A.catid 
ORDER BY C.catname 
+0

您的答案已被自動標記爲低質量。這可能是因爲你沒有解釋爲什麼你的解決方案是正確的。 – Ben 2013-03-06 13:29:43