やかんブログ

[MySQL]XMLの特定の要素でGROUP BYをする

2008年06月18日(水)19:25|谷口

谷口です。

今回はMySQLの小技を紹介したいと思います。

何がしかの構造データとしてXMLやHTMLを値として持つテーブルがあったとします。 その中の一要素のみを抽出してGROUP BY句に使いたい場合の指定方法を紹介します。 (なかなかこんなことが必要となる状況はないとは思いますが・・・)

GROUP BY句を以下のようにすることで実現できます。

SUBSTRING_INDEX(SUBSTRING_INDEX(xml, “<tagname>”, -2)1, “</tagname>”, 1)2

上記をGROUP BYに指定した場合の動作を簡単に説明しますと、以下のような感じです。

  • *1 のSUBSTRING_INDEX()でxmlから、最後に出現した<tagname>より後ろの文字列を取得します。
  • *2 のSUBSTRING_INDEX()で1で取得した文字列で最初に出現した</tagname>より前の文字列を取得します。

<tagname></tagname>が複数ある場合はSUBSTRING_INDEX()の第3引数を調整する必要があります。 また、GROUP BY したい箇所がデータによって異なる場合には適用できませんのでご注意を。

この記事に関するお問い合わせはこちら

ページの先頭へ