2013-03-06 103 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