我问了一个类似的问题,但它已成为一个更大的问题。
以下问题适用于2个选项,但如果单个选项存储在数据库中则不会。请参阅:使用SUBSTRING_INDEX()。通过Joyal George回答: MYSQL SELECT multiple values between "" in Column
我在WordPress中有一个表单,用于捕获想要在某些区域接收更新的人的信息。他们可以选择1个或更多区域。
然后我有一个报告插件,它只接受SQL来检索报告的数据。没有应用程序层,只有对MYSQL数据库的SQL查询
如果有人只选择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";}
我正在使用案例陈述(此数据库结构的上一期)
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
我需要调整'as InterestedIn'以仅满足1个输入值。
我需要找到最后一个案例的解决方案'作为省'
非常感谢任何帮助。
答案 0 :(得分:1)
你应该找到一种更好的方式来表达你想要的东西,但我认为以下内容非常接近:
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