如何停止$ wpdb-> insert运行两次

时间:2019-08-23 03:53:08

标签: php sql wordpress

我有一个将数据插入自定义Wordpress数据库表的功​​能。当该功能需要处理更多数据时,它会创建重复的条目。

我在函数中进行了检查,以检查数据库中是否存在该条目的数据。如果没有结果,则使用$wpdb->insert。如果结果确实存在,则将现有数据与新数据进行比较。如果数据相同,则continue到下一次迭代。如果它们不同,则使用$wpdb->update

我尝试在循环中放置一个sleep(1),这似乎给了函数足够的时间来更准确地进行数据库检查,但同时也给了我超时问题,我认为这不是理想的解决方法。

注意,我正在使用init钩子运行此代码。


function insert_data( $data ){

  global $wpdb;

  foreach ( $data as $k => $d ){

    $table = 'wp_sales_monthly';
    $where = "year = '" . $d['year'] . "' AND month = '" . $d['month'] . "' AND who = '" . $k . "'";

    $sql =  "
    SELECT *
    FROM " . $table . "
    WHERE " . $where . "
    ORDER BY 'meta_id'";

    $results = $wpdb->get_results( $sql, ARRAY_A );

    if ($results) {
      $last_entry = end($results);
      unset($last_entry['meta_id']);
      ksort($last_entry);

      // Adjust input array
      $d['who'] = $k;
      ksort($d);
      $d = array_map('strval', $d);

      // If last database entry is the same as this new data, skip this item and continue to the next.
      if ($last_entry == $d) { // Intentionally equal to, not identical to.
        continue;
      }
    }

    $columns = array(
      'year' => $d['year'],
      'month' =>  $d['month'],
      'who' => $k,
      'leads_processing' => $d['leads_processing'],
      'leads_processing_target' => $d['leads_processing_target'],
      'leads_closed' => $d['leads_closed'],
      'leads_closed_target' => $d['leads_closed_target'],
      'turnover' => $d['turnover'],
      'turnover_target' => $d['turnover_target'],
      'profit' => $d['solar_profit'],
      'profit_target' => $d['profit_target'],
      'margin' => $d['margin'],
      'margin_target' => $d['margin_target'],
    );

    $columns_where = array('year' => $d['year'], 'month' => $d['month'], 'who' => $k );


    if ( $results ){
      // Update Data
      $updated = $wpdb->update(
        $table,
        $columns,
        $columns_where
      );

      // Else insert new data.
    } else {
      $inserted = $wpdb->insert(
        $table,
        $columns
      );

    }

    // sleep(1);
  }
}

0 个答案:

没有答案