2016-12-28 21 views
1

レガシーデータベースに2つのテーブルがあります。それらの1つにいくつかのxmlを含むフィールドが含まれています。この他の表には、XMLを構成するタグが含まれています。例えば動的XPATHを使用してMySqlでXMLを抽出する

は、私はすべての翻訳を抽出したい

<en>Something</en><fr>Quelque chose</fr><it>Qualcosa</it> 

ようなフィールドを有する言語のリスト(例えばenfrit)とテーブルとテーブルを考えます。私は

SELECT GROUP_CONCAT(extractvalue(table.field, languages.sigla)) 
FROM table, languages 
GROUP BY table.id 

ようになったクエリを持っているしかし、私は次のエラー

[HY000][1105] Only constant XPATH queries are supported 

私はこれは、MySQLの制限です推測(私はusignバージョン5.6)を取得します。私が探しているものを得る他の方法はありますか?あなたが試すことができます

答えて

0

1つのオプションは、(必要に応じて調整する)である:

mysql> SELECT 
    ->  GROUP_CONCAT('SELECT ExtractValue(@`xml`, \'', `der`.`lang`, '\') `lang`' SEPARATOR ' UNION ALL ') INTO @`query` 
    -> FROM (
    ->  SELECT 'en' `lang` 
    ->  UNION 
    ->  SELECT 'fr' 
    ->  UNION 
    ->  SELECT 'it' 
    ->) `der`; 
Query OK, 1 row affected (0.00 sec) 

mysql> SET @`xml` := '<en>Something</en><fr>Quelque chose</fr><it>Qualcosa</it>'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> SET @`query` := CONCAT('SELECT GROUP_CONCAT(`der`.`lang`) 
    '>       FROM (', @`query`, ') `der`'); 
Query OK, 0 rows affected (0.00 sec) 

mysql> PREPARE `stmt` FROM @`query`; 
Query OK, 0 rows affected (0.00 sec) 
Statement prepared 

mysql> EXECUTE `stmt`; 
+----------------------------------+ 
| GROUP_CONCAT(`der`.`lang`)  | 
+----------------------------------+ 
| Something,Quelque chose,Qualcosa | 
+----------------------------------+ 
1 row in set (0.00 sec) 

mysql> DEALLOCATE PREPARE `stmt`; 
Query OK, 0 rows affected (0.00 sec) 
関連する問題