MySQL组按URL路径模式

时间:2017-06-20 15:33:34

标签: mysql select group-by

如何按路径模式对包含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/ * / * / * ...

1 个答案:

答案 0 :(得分:0)

试试这个

Rextester Sample

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/cat1http://example.com/categories将被放入您不想要的group