Intereting Posts
wp_insert_user сохраняет повторяющиеся значения показывать только дети навигационного меню Shortcode: текстовый контент заканчивается вне html-тегов Как добавить пользовательские цветовые образцы для всех редакторов WYSIWYG? Локальный контент отличается от удаленного контента Когда использовать Исключения против Объектов Ошибок против простого ложного / нулевого Файлы мультимедиа существуют в папке загрузки, но не отображаются. WP Multisite Static Frontpage Как ограничить роли редактора WordPress определенной категорией? Страницы (только) не загружаются после публикации большого количества страниц Стандартный WP_Query не возвращает результаты Отзывчивые изображения в слайдере Bootstrap 4 Добавить пользовательский мета-ящик на странице Может ли несколько сайтов под одной структурой папок совместно использовать медиа-каталоги? Запустить javascript-код после wp_login?

Сделайте один запрос для добавления записей в базу данных

У меня есть ситуация, когда мне нужно несколько записей, которые нужно добавить в таблицу базы данных (иногда несколько сотен), но используя $wpdb->insert()$wpdb->update() где необходимы необходимые изменения) запускает эти вставки по одному, что очень неэффективно.

Есть ли $wpdb метод $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('Ymd 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; } 

Solutions Collecting From Web of "Сделайте один запрос для добавления записей в базу данных"

Есть ли доступный метод $ wpdb, который позволит мне создать запрос, перейдя по моему запросу и затем выполнив его, как только я выйду из этого цикла?

Если вы и ваш цикл можете построить правильный SQL, используйте $wpdb->query . Вы можете выполнить любой запрос, который вы хотите, с тем, чтобы всякая версия INSERT INTO которую вы создаете, должна работать.

После некоторых исследований и неохотного принятия того, что я должен был бы сам его закодировать, я придумал код, доступный в этом Пастбине .

Я сделал некоторый бенчмаркинг, и по сравнению с оригинальным методом, используемым в моем вопросе, это очень быстро. Один из 100 вставок, вот результаты –

Старая работа заполнена: 0.045570850372314 секунд
Новая вакансия завершена: 0.0089929103851318 секунд

Как вы можете видеть, это более чем в 5 раз быстрее для 100 новых строк. Мое тестирование также показало, что общий множитель времени, который был увеличен, экспоненциально возрастает.

Надеюсь, WP скоро построит подобный метод в $ wpdb!