从两个表中选择和计数

Posted

技术标签:

【中文标题】从两个表中选择和计数【英文标题】:Select and count from two tables 【发布时间】:2013-03-06 13:08:47 【问题描述】:

如何使用 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 查询来做到这一点?

【问题讨论】:

JFYI:您的数据库称为 mysql,而不是 mysqli 【参考方案1】:

如果您希望在单个列中显示此内容,则可以使用以下内容:

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 |

【讨论】:

【参考方案2】:

试试这个

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

【讨论】:

【参考方案3】:

试试这个:

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

【讨论】:

您的答案已被自动标记为低质量。这可能是因为您没有解释为什么您的解决方案是正确的。

以上是关于从两个表中选择和计数的主要内容,如果未能解决你的问题,请参考以下文章

从连接表中选择计数

如何使用mysql从图像表中获取总数?

SQL查询根据值和字段名从两个表中获取计数

使用联合第 2 部分从多个表中选择计数相关行

从另一个表中选择具有数据计数的数据[重复]

HeidiSQL 根据两个条件从两个表中选择列