MySQL выбирает слова в кавычках «» внутри столбца смешавшегося текста

Я задал аналогичный вопрос, но это стало более серьезной проблемой.

Следующий вопрос удовлетворял двум вариантам, но не в том случае, если в базе данных была сохранена одна опция. См .: Использование SUBSTRING_INDEX (). Ответа на этот вопрос Joyal George: MYSQL SELECT несколько значений между "" в столбце

У меня есть форма в WordPress, которая фиксирует информацию о тех, кто хочет получать обновления в определенных областях. Они могут выбрать одну или несколько областей.

Затем у меня есть плагин отчетности, который принимает SQL только для получения данных для отчета. Нет прикладного уровня, только SQL-запросы к базе данных MYSQL

Если кто-то выбирает только 1 область, мне нужно извлечь только эту область. Если они выбирают более 1 области, мне нужно извлечь каждую область, разделенную запятой. Они могут выбрать до 9 областей.

Данные в столбце:

1 площадь:

Western Cape 

Несколько областей:

 a:3:{i:0;s:10:"North-West";i:1;s:12:"Western Cape";i:2;s:13:"Northern Cape";} 

Я использую case case (предыдущая проблема с этой структурой базы данных)

 select a.entry_id, MAX(case when field_id = 74 then entry_value end) as FirstName, MAX(case when field_id = 75 then entry_value end) as LastName, MAX(case when field_id = 76 then entry_value end) as Email, MAX(case when field_id = 78 then entry_value end) as Phone, MAX(case when field_id = 79 then (select concat( SUBSTRING_INDEX( SUBSTRING_INDEX( SUBSTRING_INDEX( entry_value, '"', 4 ), '"', 2 ), '"', -1 ), ",", SUBSTRING_INDEX( SUBSTRING_INDEX( SUBSTRING_INDEX( entry_value, '"', 4 ), '"', 4 ), '"', -1 ) )) end) as InterestedIn, MAX(case when field_id = 81 then entry_value end) as Province from ch_arf_entry_values a GROUP BY a.entry_id 

Мне нужно настроить «как заинтересованный», чтобы обслуживать только одно входное значение.

Мне нужно найти решение для последнего случая «как провинция»,

Будем очень благодарны любой помощи.

    Вы должны найти лучший способ представить то, что хотите, но я думаю, что следующее приближается:

     select concat_wc(',', substring_index(substring_index(entry_value, '"', 2), '"' -1), substring_index(substring_index(entry_value, '"', 4), '"' -1), . . . ) 

    Возможно, вам придется поставить условие остановки на основе количества значений в количестве значений в строке, что приведет к чему-то вроде:

     select concat_ws(',', case when num_entry_values >= 1 then substring_index(substring_index(entry_value, '"', 2), '"' -1) end, case when num_entry_values >= 2 then substring_index(substring_index(entry_value, '"', 4), '"' -1) end, . . . ) 

    Если у вас нет этого номера, вы можете рассчитать его, посчитав количество двойных кавычек в строке.

    РЕДАКТИРОВАТЬ:

    Чтобы подсчитать количество записей, подсчитайте " :

     from (select aev.*, (length(entry_value) = length(replace(entry_value, '"', '')) ) / 2 as num_entry_values from ch_arf_entry_values aev ) aev