2016-12-28 7 views
1

У меня есть две таблицы в старой базе данных. Одно из них содержит поле, содержащее некоторый xml. В этой другой таблице содержатся теги, которые составляют xml.Извлечение XML в MySql с динамическим XPATH

Для примера рассмотрим таблицу со списком языков (например, en, fr, it) и таблицу с полем, как

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

Я хотел бы, чтобы извлечь все переводы. У меня есть запрос, который идет как

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

Один из вариантов вы можете попробовать это (корректировать по мере необходимости):

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) 
Смежные вопросы