目前有一个数据库格式如下:
id(唯一身份证)
网址:http://domain.com/page.html
网址来自同一个域和来自不同的域。
这也需要在一个查询中完成,以便在向最终用户显示数据时可以使用限制等内容。
数据
1, http://domain.com/about.html
2, http://domain.com/index.html
3, http://anotherdomain.com/index.html
4, http://anotherdomain.com/contact.html
预期输出
(我只想返回每个组的第一个url(第一个是数据排序顺序,这个例子是“id ASC”),其中一个组由共享一个根的url组成域。)
1, http://domain.com/about.html
3, http://anotherdomain.com/index.html
答案 0 :(得分:2)
这应该适合你:
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
对于您的测试数据,我得到了这个:
1, 'http://domain.com/about.html'
3, 'http://anotherdomain.com/index.html'
答案 1 :(得分:2)
这应该可以,但在连接表时可能会遇到问题
SELECT REPLACE(REPLACE(SUBSTRING_INDEX(LOWER(table.url), '/', 3), 'www.', ''), 'http://', '') AS domain FROM table GROUP BY domain
答案 2 :(得分:0)
如果你不是指ORDER BY url,GROUP BY也可以处理像substring()这样的函数。