我需要一些有关 MySQL 查询的帮助。
我有两张表,一张是backlinks
带有is_homepage
(布尔)标志的列表。第二个表是domains
所有的列表backlinks
、一个 was link_found
(bool) 标志和一个url_count
列,该列是backlinks
表中与每个域相关联的行数。
请注意,该domain_id
列是域表列的外键id
。这是一些示例数据。
反向链接
id domain_id is_homepage page_href
1 1 1 http://ablog.wordpress.com/
2 1 0 http://ablog.wordpress.com/contact/
3 1 0 http://ablog.wordpress.com/archives/
4 2 1 http://www.somewhere.org/
5 2 0 http://www.somewhere.org/page=3
6 3 1 http://www.great-fun-site.com/
7 3 0 http://www.great-fun-site.com/index.html
8 4 0 http://red.blgspot.com/page=7
9 4 0 http://blue.blgspot.com/page=9
域
id url_count link_found domain_name
1 3 1 wordpress.com
2 2 0 somewhere.org
3 2 1 great-fun-site.com
4 2 1 blgspot.com
我希望从上述数据中得到的结果是:count = 2, total = 5。
我试图从域表(计数)中获取行数,然后url_count
从域表 WHERE 中获取(总数)的总和link_found
为 1,并且反向链接表中的链接之一is_homepage
为 1。
这是我正在尝试使用的查询。
SELECT SUM(1) AS count, SUM(`url_count`) total
FROM `domains` AS domain
LEFT JOIN `backlinks` AS link ON link.domain_id = domain.id
WHERE domain.id IN (
SELECT DISTINCT(bl.domain_id)
FROM `backlinks` AS bl
WHERE bl.tablekey_id = 11
AND bl.is_homepage = 1
)
AND domain.link_found = 1
AND link.is_homepage = 1
GROUP BY `domain`.`id`
这个查询的问题是它为表中的每个条目返回一行domains
。我想我可能还需要一个子查询来将返回的结果相加,但我不确定这是否正确。有谁看到我做错了什么?谢谢!
编辑:
我遇到的问题是,如果反向链接表中有多个主页,那么它会被多次计数。我只需要计算每个域一次。