2013-05-30 25 views
0

的一切都在這裏首先是一個SqlFiddle什麼我想要做的事:http://sqlfiddle.com/#!2/a3f19/1MySQL的連接表中選擇兩項罪名

所以我有兩個表domainslinks。每個鏈接都有一個域,每個域可以有多個鏈接。我試圖得到具有相同的IP地址(AS count),然後他們的url_counts(AS total)的總數的域數。下面是我試着這樣做:

我有兩個數據庫表

CREATE TABLE IF NOT EXISTS `domains` (
`id` int(15) unsigned NOT NULL AUTO_INCREMENT, 
`tablekey_id` int(15) unsigned NOT NULL, 
`domain_name` varchar(300) NOT NULL, 
`ip_address` varchar(20) DEFAULT NULL, 
`url_count` int(6) NOT NULL DEFAULT '0', 
PRIMARY KEY (`id`) 
) ENGINE=innodb DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS `links` (
`id` int(15) unsigned NOT NULL AUTO_INCREMENT, 
`tablekey_id` int(15) unsigned NOT NULL, 
`domain_id` int(15) unsigned NOT NULL, 
`page_href` varchar(750) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=innodb DEFAULT CHARSET=utf8; 

這些表下面有一些數據:

INSERT INTO `domains` 
(`id`, `tablekey_id`, `domain_name`, `ip_address`, `url_count`) 
VALUES 
('1', '4', 'meow.com', '012.345.678.9', '2'), 
('2', '4', 'woof.com', '912.345.678.010','3'), 
('3', '4', 'hound.com', '912.345.678.010','1'); 


INSERT INTO `links` 
(`id`, `tablekey_id`, `domain_id`, `page_href`) 
VALUES 
('1', '4', '1', 'http://prr.meow.com/page1.php'), 
('2', '4', '1', 'http://cat.meow.com/folder/page11.php'), 
('3', '4', '2', 'http://dog.woof.com/article/page1.php'), 
('4', '4', '2', 'http://dog.woof.com/'), 
('5', '4', '2', 'http://bark.woof.com/blog/'), 
('6', '4', '3', 'http://hound.com/foxhunting/'); 

我想要得到的結果是:

012.345.678.9 1 2 
912.345.678.010 2 4 

但是我得到的結果是

012.345.678.9 2 4 
912.345.678.010 4 10 

繼承人的查詢我:

SELECT 
ip_address, 
COUNT(1) AS count, 
SUM(url_count) AS total 

FROM `domains` AS domain 
JOIN `links` AS link ON link.domain_id = domain.id 
WHERE domain.tablekey_id = 4 

AND ip_address > '' 

GROUP BY ip_address 

在此先感謝我一直對這個整天:(

回答

1

下面總結了link表的連接之前:

SELECT ip_address, 
     COUNT(1) AS count, 
     SUM(url_count) AS total 
FROM `domains` AS domain 
JOIN (select l.domain_id, count(*) as lcnt 
     from `links` l 
     group by l.domain_id 
    ) link 
    ON link.domain_id = domain.id 
WHERE domain.tablekey_id = 4 AND ip_address > '' 
GROUP BY ip_address; 

它不使用lcnt,但你也可能會發現有用的。

+0

這工作感謝一堆! – RachelC

2

請問以下工作?

SELECT 
ip_address, 
(select count(*) from domains d2 where domains.ip_address = d2.ip_address) as dcount, 
count(ip_address) 
from links 
join domains on link.domain_id = domains.id 
where domain.tablekey_id = 4 
and ip_address <> '' 
group by ip_address 
+0

感謝您的幫助。 – RachelC