如何按路径模式对包含URL的行进行分组?例如。我们有地址:
1 http://example.com
2 http://example.com/products
3 http://example.com/products/some-product
4 http://example.com/categories
5 http://example.com/categories/cat1
6 http://example.com/categories/cat2
7 http://example.com/categories/cat3
8 http://example.com/tags
9 http://example.com/tags/tag1
10 http://example.com/tags/tag2
11 http://example.com/tags/tag3
12 http://example.com/about
结果将是:
1 http://example.com
2 http://example.com/products
3 http://example.com/products/some-product
4 http://example.com/categories
5 http://example.com/categories/cat1
8 http://example.com/tags
9 http://example.com/tags/tag1
12 http://example.com/about
我们知道域名http://example.com。我们需要所有不同的路径类型。基本上我们想知道网页的不同页面。所以它有点http://example.com/ * / * / * ...
答案 0 :(得分:0)
试试这个
select * from tbl1 t1
where exists
(select 1
from tbl1 t2
group by substring_index(concat(url,'@'),'/',4)
having t1.id=min(t2.id)
);
在MYSQL
中,没有选择不在group by
中的列的硬性规则。所以你也可以这样做。
select *
from tbl1
group by
substring_index(concat(url,'@'),'/',4)
order by id
;
的角色
substring_index(concat(url,'@'),'/',4)
首先会在网址的末尾添加一个额外的字符,比如@
。然后它会截断url
直到4th
/
。如果不在最后添加@
,http://example.com/categories/cat1
和http://example.com/categories
将被放入您不想要的group
。