【发布时间】:2016-09-24 16:17:43
【问题描述】:
我正试图弄清楚如何根据我的一列的值对 Mysql 查询的结果进行分组。有问题的数据库/表是 WordPress 选项表,它具有以下列:
- option_id
- 选项名称
- option_value
- 自动加载
我设置了一个ACF 转发器字段来保存一系列州和城市。不幸的是,我列出了 5000 多个城市,而 ACF 对每个城市使用一个查询,导致查询次数和页面加载量高得离谱。我正在尝试使用直接数据库调用来优化我的函数以减少查询的数量,而且我快到了,我只是不知道如何对我的数据进行适当的分组。我现在要做的是在一次调用中从数据库中获取所有状态及其相关信息。我想获得以下值:
- 州名
- 州缩写
- 状态弹
ACF 将这些值存储在选项表中,每个值都在其自己的条目中,选项名称略有匹配。对于我添加的每个状态,三个条目会添加到选项表中,其中包含以下 option_name 值:
- options_states_0_state_name
- options_states_0_state_abbreviation
- options_states_0_state_slug
随着更多状态的添加,数字会增加。我需要获取每个州的所有信息(我们的数据库中列出了 51 个,每个有三个条目,总共需要检索 153 条记录)。我设法设置了一个查询,如下所示,它获取信息,但它没有对它进行分组:
select option_name, option_value from wp_options where
option_name REGEXP '^options_states_.+_state_.+$';
我需要按条目中间的数字(在本例中为 0)对条目进行分组,而不是按顺序列出它们。我希望返回 51 个结果而不是 153 个,并且每个结果应该是一个包含状态名称、状态缩写和状态段的数组。如何按值名称中间的数字对值进行分组?为了更清楚,我附上了数据库结构和查询结果的屏幕截图。
为清楚起见编辑:
归根结底,我希望返回这样的结构:
array(
array(
'options_states_0_state_name' => 'Alabama',
'options_states_0_state_abbreviation' => 'AL',
'options_states_0_state_slug' => 'al',
),
array(
'options_states_1_state_name' => 'Alaska',
'options_states_1_state_abbreviation' => 'AK',
'options_states_1_state_slug' => 'ak',
),
etc...
)
每个单独的状态都应该有自己的数组,其中包含上述三个值,按出现在键中间的数字分组。我不介意它是否是标准数组而不是关联数组。我只需要正确分组所有内容。
【问题讨论】:
标签: mysql database wordpress advanced-custom-fields