MySQL统计多个外键

标签 mysql count foreign-keys

所以我有一个查询,我从“站点”表中进行选择,并使用外键计算“页面”的数量

SELECT s_id, s_name, s_main_url, COUNT(p_id) AS numpages
FROM sites
INNER JOIN pages ON sites.s_id = pages.site_id
GROUP BY pages.site_id
ORDER BY s_id ASC

我想添加另一个外键来计数,可能不止一个,所以我尝试了以下方法

SELECT s_id, s_name, s_main_url, COUNT(p_id) AS numpages, COUNT(l_id) AS numlinks
FROM sites
INNER JOIN pages ON sites.s_id = pages.site_id
INNER JOIN links ON sites.s_id = links.site_id
GROUP BY pages.site_id, links.site_id
ORDER BY s_id ASC

numpages 和 numlinks 的计数是相同的,它们似乎将所有表格结果相乘,并给了我一些不正确的巨大数字

有什么想法吗?

最佳答案

您应该考虑使用子选择而不是 JOIN 和 GROUP BY。

SELECT s_id, s_name, s_main_url, numpages, numlinks
FROM sites, 
(SELECT COUNT(p_id) as numpages FROM pages WHERE pages.site_id = sites.s_id) as cnt_pages,
(SELECT COUNT(l_id) as numlink FROM links WHERE links.site_id = sites.s_id) as cnt_links
ORDER BY s_id ASC

关于MySQL统计多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659603/

相关文章:

java - 使用 hashmap 改进词频计数

mysql - 在子查询中加入

python - Django:在views.py中使用向后关系

java - 尝试删除记录时如何修复 Spring-Boot 中的 "violates foreign key constraint"。使用@ManyToMany

php - CMS 配置 - MySQL 还是 XML?

mysql - Insert Into Table B Select * From Table A,但在表 B 中有一个额外的列,这可能吗?

MySQL 如何在左连接中计算 where 子句仅用于计数?

foreign-keys - Symfony2 OneToOne 关系变成唯一索引还是外键?

mysql - 属性 'Private' 不是字符串或字节数组。只能为 String 和 Byte 数组属性配置长度

php - 连接表并找到列值的最大值