如何加速WordPress中雇主查询可用Freelancer的日期搜索请求?
插件功能概述
- 雇主可通过插件搜索并雇佣自由职业者(Freelancer)。
- Freelancer能通过日历选择日期,将这些日期标记为可工作状态。

- 雇主通过选择起止日期(from和to)搜索符合条件的可用Freelancer,之后可将其加入候选名单或发送工作简报。
当前遇到的问题
当雇主选择的起止日期间隔天数较多时,查询会超时。
已尝试的解决方案及问题
方案1:将可用日期存入user_meta数组,使用LIKE查询
代码实现如下:
$date_query = array(); if ( ! empty( $from ) && ! empty( $to ) ) { $start = new DateTime( $from ); $end = new DateTime( $to ); $end = $end->modify( '+1 day' ); // 包含结束日期 $interval = new DateInterval( 'P1D' ); // 1天间隔 $date_range = new DatePeriod( $start, $interval ,$end ); $date_query = [ 'relation' => 'AND' ]; foreach( $date_range as $date ) { $date_query[] = array( 'key' => 'fmaa_available_dates', 'value' => $date->format( 'Y-m-d' ), 'compare' => 'LIKE' ); } }
问题:由于使用LIKE操作,当日期间隔天数较多时,查询必然超时。
方案2:将日期存入独立的user_meta,使用IN查询
通过添加独立的user_meta存储每个可用日期,查询代码如下:
if ( ! empty( $from ) && ! empty( $to ) ) { $start = new DateTime( $from ); $end = new DateTime( $to ); $end = $end->modify( '+1 day' ); // 包含结束日期 $interval = new DateInterval( 'P1D' ); // 1天间隔 $date_range = new DatePeriod( $start, $interval ,$end ); $date_query = [ 'relation' => 'AND' ]; foreach ( $date_range as $date ) { $date_query[] = array( 'key' => 'fmaa_availability_dates', 'value' => $date->format( 'Y-m-d' ), 'compare' => 'IN' ); } }
问题:同样因为天数过多,查询耗时过久导致超时。
内容的提问来源于stack exchange,提问作者Muhammad Zohaib
相关产品推荐
相关产品推荐

