开发者

MySQL group by url data rows that share root domain

Currently have a database formatted as follows:

id (unique id)

url: http://domain.com/page.html

Urls are both from the same domain and from different domains.

This also needs to be accomplished in one query so that I can use things like limits when displaying the data to the end user.

Data

1,开发者_StackOverflow社区 http://domain.com/about.html
2, http://domain.com/index.html
3, http://anotherdomain.com/index.html
4, http://anotherdomain.com/contact.html

Expected Output

( I only want to return the first url (first being in which ever order the data is being sorted in, this example being "id ASC") of each group, where a groups is made up of urls that share a root domain.)

1, http://domain.com/about.html
3, http://anotherdomain.com/index.html


This should work for you:

SELECT T2.id, url FROM (
    SELECT MIN(id) AS id FROM Table1
    GROUP BY SUBSTRING_INDEX(url, '/', 3)
) AS T1
JOIN Table1 AS T2
ON T1.id = T2.id

For your test data I get this:

1, 'http://domain.com/about.html'
3, 'http://anotherdomain.com/index.html'


This should work but may run into issues when joining tables

SELECT REPLACE(REPLACE(SUBSTRING_INDEX(LOWER(table.url), '/',  3), 'www.', ''), 'http://', '') AS domain
FROM table
GROUP BY domain


If you didn't mean ORDER BY url, GROUP BY works on functions like substring() too.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜