[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 したい箇所がデータによって異なる場合には適用できませんのでご注意を。