有没有办法从一条MySQL命令中获得3维以上的数组

时间:2016-05-04 作者:Nadroev

例如,一个包含所有月份的数组,每个月内是该月注册的所有用户,以及每个用户的详细信息。我可以通过搜索今年注册的所有用户来解决这个问题,然后将结果通过一个循环来构建我想要的数组,通过检测“date”字段的第6和第7个字符(例如:2016-04-05)的变化来实现,但我想知道是否有更“正式”的方法。

1 个回复
最合适的回答,由SO网友:bosco 整理而成

“有没有一种方法可以从一个MySql命令中获取3+维数组”这个问题的直接答案是yes, sort of - WordPress通常通过以下方式从MySQL行存储和检索多维数据:serialize()ing和unserialize()将结构化数据转换为字符串格式,因此使用WordPress的数据库交互机制当然是可能的。这个Metadata API 例如,在传递结构化数据时自动处理此过程。

然而,您的问题更像是“如何将数据库结果重新构造为自定义格式?”

最“WordPress-y”的方式如您所述-使用WP_User_Query 查询用户,然后将结果重新排列到所需的结构中。

可以创建一个定制的SQL查询,根据需要对结果进行格式化,但这似乎有违直觉——关系数据库的设计非常强调二维数据。查询地址:Stack Overflow 如果你对这样的问题感兴趣的话。您可以使用parse_query() 方法WP_Query.

为了获得某一年内注册的用户的结构,按注册月份分组,我将执行以下操作:

function wpse225632_get_users_by_reg_month( $year = null ) {
  $args = array();

  if( isset( $year ) )
    $args[ \'date_query\' ] = array( \'year\' => $year );

  $users          = get_users( $args );
  $users_by_month = array();

  foreach( $users as $user ) {
    $reg_month = mysql2date( \'m\', $user->user_registered );

    if( ! isset( $users_by_month[ $reg_month ] ) )
      $users_by_month[ $reg_month ] = array();

    $users_by_month[ $reg_month ][] = $user;
  }

  return $users_by_month;
}
如果要经常运行此查询,则可能希望使用Transients API, 然后,每当注册新用户时,使缓存无效并删除瞬态。