2011-05-05 6 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 сортирует первичный идентификатор в таблице. Он говорит мне, какие ссылки появляются в ссылке 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 | 

... и так далее.

Таким образом, вы можете видеть, что www.example.com появляется дважды, так как он связан с обоими звеньями 1 и 2, но 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

ответ

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

Это даст вам все отдельные URL-адреса, каждый со списком идентификаторов ссылок

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; 
Смежные вопросы