2011-05-05 75 views
5

我有这张表,可以称之为表一。对MySQL数据进行分组

+----+---------+-----------------+ 
| id | link_id | url    | 
+----+---------+-----------------+ 
| 1 |  1 | www.example.com | 
| 2 |  1 | www.abc.com  | 
| 3 |  1 | www.test.com | 
| 4 |  1 | www.t1.com  | 
| 5 |  1 | www.newtest.com | 
| 6 |  1 | www.testing.com | 
| 7 |  1 | www.abc.com  | 
| 8 |  1 | www.example.com | 
| 9 |  1 | www.web1.com | 
| 10 |  1 | www.web2.com | 
| 11 |  2 | www.dear.com | 
| 12 |  2 | www.google.com | 
| 13 |  2 | www.flowers.com | 
| 14 |  2 | www.yahoo.com | 
| 15 |  2 | www.abc.com  | 
| 16 |  2 | www.dell.com | 
| 17 |  2 | www.web.com  | 
| 18 |  2 | www.example.com | 
| 19 |  2 | www.test.com | 
| 20 |  2 | www.abc.com  | 
+----+---------+-----------------+ 
20 rows in set (0.00 sec) 

link_id是排序表中的主标识符。它告诉我哪些URL出现在链接1,链接2等

我想acomplish是: 1.获取所有的唯一URL, 2显示该链接的URL属于

所以示例输出将是:

+-----------------+---------+ 
| url    | link_id | 
+-----------------+---------+ 
| www.example.com |  1 | 
| www.example.com |  2 | 
| www.abc.com  |  1 | 
| www.abc.com  |  2 | 
| www.test.com |  1 | 
| www.test.com |  2 | 
| www.t1.com  |  1 | 
| www.newtest.com |  1 | 
| www.testing.com |  1 | 
| www.web1.com |  1 | 

...等等。

所以你可以看到,因为它是用两个链接1和2相关www.example.com出现了两次,但web1.com只出现一次,因为它只属于链接1.

我尝试了好几种不同的group by但我最终只能挠挠我的脑袋。

任何帮助表示赞赏。下面是表转储如果有人需要:

CREATE TABLE IF NOT EXISTS `table1` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `link_id` tinyint(3) unsigned DEFAULT NULL, 
    `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=21 ; 

INSERT INTO `table1` (`id`, `link_id`, `url`) VALUES 
(1, 1, 'www.example.com'), 
(2, 1, 'www.abc.com'), 
(3, 1, 'www.test.com'), 
(4, 1, 'www.t1.com'), 
(5, 1, 'www.newtest.com'), 
(6, 1, 'www.testing.com'), 
(7, 1, 'www.abc.com'), 
(8, 1, 'www.example.com'), 
(9, 1, 'www.web1.com'), 
(10, 1, 'www.web2.com'), 
(11, 2, 'www.dear.com'), 
(12, 2, 'www.google.com'), 
(13, 2, 'www.flowers.com'), 
(14, 2, 'www.yahoo.com'), 
(15, 2, 'www.abc.com'), 
(16, 2, 'www.dell.com'), 
(17, 2, 'www.web.com'), 
(18, 2, 'www.example.com'), 
(19, 2, 'www.test.com'), 
(20, 2, 'www.abc.com'); 
+0

为漂亮的桌子+1。 – GSerg 2011-05-05 16:44:39

回答

1
SELECT url, GROUP_CONCAT(link_id) 
    FROM table1 
GROUP 
    BY url; 

这会给你所有不同的网址,每个网址都有一个链接ID列表

1
Select url, link_id 
From Table1 
Group By url, link_id 
3

请问不是一个独特的名单的工作?订单是否重要?

SELECT DISTINCT url, link_id 
FROM `table1` 
ORDER BY 1, 2 
1
select * from table group by link_id,url 
1

那么恕我直言,你应该按双方link_id和URL,并且可能比通过URL进行排序,以便使用相同的网址在一起。

SELECT url, link_id FROM table1 
    ORDER BY url 
    GROUP BY url, link_id 
2

除非我误解的问题,这听起来像所有你需要的是一个DISTINCT子句:

select distinct url, link_id from table1; 
1

除非我失去了一些东西:

SELECT DISTINCT url, link_id FROM table1; 
相关问题