やったこと

webサービスを作るときに考えたことを垂れ流します

【MYSQL】GETパラメーターやハッシュタグが付いたURLを集計する!

MYSQLが苦手な私が難問に直面しました・・

「GETパラメーター(?)」とか「ハッシュタグ(#)」とかが付いたURLってあるじゃないですか。

こんな感じのやつです。
http://hogehoge.com/page/1
http://hogehoge.com/page/1?param=123
http://hogehoge.com/page/1#chapter1

これらをみんな同じURLとみなして、SQLのCOUNTで集計をするというものです。

結論からいうとこんな感じのクエリでいけました。

  SELECT url, COUNT(*) AS click_count FROM test_tabel  GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(url, '#', 1), '?', 1);


内側の「SUBSTRING_INDEX(url, '#', 1)」で、まずはURLのハッシュタグ(#)より前の部分を抜き出します。

続いて外側の「「SUBSTRING_INDEX(url, '?', 1)」」で、URLのGETパラメータ(?)より前の部分を抜き出します。

「#」や「?」が付いてないURLも、そのまま合算して集計されます。

もっとかっこいいやり方があるかもしれないけど、ちゃんと動いてるみたいだしこれでいいか。

以上です・・。