只需查询一次即可向数据库添加条目

时间:2013-07-31 作者:David Gard

我有一种情况,需要将几个条目添加到数据库表中(有时是几百个),但使用$wpdb->insert() (和$wpdb->update() 在需要编辑的地方)一次运行一个插入,这是非常低效的。

是否有$wpdb 方法,该方法允许我通过循环查询来创建查询,然后在退出该循环后执行它?

下面是我当前用于添加新数据的代码。如有任何改进建议,将不胜感激-

function do_add_invitees_in_database(){

    /** Make sure there are invitees to add */
    if(empty($this->invitees[\'new\'])) :
        return $_POST[\'add_successfull\'] = true;
    endif;

    global $wpdb;

    /** Get the creator ID */
    $creator_id = get_current_user_id();

    /** Make the invitee creation date */
    $date_added = date(\'Y-m-d H:i:s\', time());  

    /** Insert the new invitees in to the \'event_invitees\' database table */
    foreach($this->invitees[\'new\'] as $invitee) :

        $row = array(
            \'invitee_created_by\'        => $creator_id,
            \'invitee_created_date\'      => $date_added,
            \'invitee_last_edited_by\'    => \'0\',
            \'invitee_last_edited_date\'  => \'0000-00-00 00:00:00\',
            \'event_id\'                  => $_POST[\'event_id\'],
            \'email\'                     => $invitee[\'email\'],
            \'first_name\'                => $invitee[\'first_name\'],
            \'surname\'                   => $invitee[\'surname\'],
            \'custom\'                    => $invitee[\'custom\'],
            \'invited\'                   => 0
        );
        $wpdb->insert($wpdb->event_invitees, $row);

        /** Debug the query run by $wpdb->insert() */
        $this->debug($row);

    endforeach;

    /** If there were no errors, mark the invitee additions as successfull */
    return $_POST[\'add_successfull\'] = (!$this->error_found) ? true : false;

}

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

有没有一个$wpdb方法可以让我通过循环查询来创建查询,然后在退出循环后执行它?

如果您和您的循环可以构造适当的SQL,那么使用$wpdb->query. 您可以使用它运行任何查询whatever version of INSERT INTO 您构建的应该是有效的。

SO网友:David Gard

经过一些研究,我不情愿地接受了我必须自己编写代码的观点,我想出了这个Pastebin.

我已经做了一些基准测试,与我在问题中使用的原始方法相比,这非常快。100个插入,以下是结果-

旧作业完成时间:0.045570850372314秒
新作业完成时间:0.0089929103851318秒

正如你所看到的,100个新行的速度要快5倍多。我的测试还表明,所用时间的总体乘数呈指数级增长。

希望WP能很快在$wpdb中构建一个类似的方法!

结束

相关推荐

JQuery在WordPress php文件中不起作用

我正在尝试使用jQuery垂直滚动div内容。我在中使用了以下代码行function.phpadd_action( \'wp_enquque_scripts\', \'my_script_enqueue\' ); function my_script_enqueue() { wp_enqueue_script( \'my-jquery\', \'/wordpress/wp-content/themes/MyTheme/js/jquery-1.9.0.js\', array