Intereting Posts
Функции jQuery работают только на главной странице звуковая ссылка производит черный ящик Удалить текст, связанный с публикацией, а также текст, связанный с категорией, из темы? Почему $ for jquery не работает? wp_remote_get не работает с безопасными подключениями https? WP_query: meta_key с настраиваемым правилом для определенного значения Запретить авторам редактировать / удалять свои собственные или другие опубликованные сообщения какой лучший способ включить изображения из папки изображений шаблона? Минимизация скриптов и css-файлов, добавляемых плагинами Наличие страниц после указания сообщения post_type Сделайте пункты подменю главной ссылкой в ​​меню администратора, используя fuctions.php Сколько раз я могу подключиться к одному и тому же действию? Как я могу отобразить пользовательскую страницу в области администрирования WordPress? (получение сообщения «не разрешено для доступа к этой странице» Функция posts_per_page ограничивает количество элементов галереи Мои постоянные ссылки на все страницы и сообщения теперь включают старые названия страниц в качестве родителей / категорий

get_results на больших наборах данных

Я экспериментирую с очень тревожной проблемой, используя специальный SQL-запрос. У меня есть пользовательская таблица MySQL, называемая trading_datas имеющая 165 строк для 4,4Mo. Одно полевые datas моей таблицы – большой сериализованный массив.

Прося об этом так:

 $querystr = "SELECT item, datas FROM trading_datas"; $result = $wpdb->get_results( $querystr, 'ARRAY_A' ); 

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

Должен ли я закрепить мой сериализованный массив перед тем, как поместить его в базу данных? Любое другое решение?

Большое спасибо за помощь!

Solutions Collecting From Web of "get_results на больших наборах данных"

$wpdb не подходит для сбора огромного количества данных из базы данных. Зачем? В твоем случае:

  1. $wpdb->get_results( ... ) – извлекает все результаты в вашу RAM сразу. Это означает, что если у вас есть 4 МБ, 10 МБ или 50 МБ данных в БД, все будет сохранено в памяти (что ограничено, как ты знаешь).
  2. $wpdb->get_results( ..., ARRAY_A )$wpdb извлекает все как объект по умолчанию, а затем, если вы передадите ARRAY_A , он преобразует массив объектов в массив связанных массивов. Это означает, что если вы уже 50mb в память 4 50mb / 10 50mb / 50mb данных, вам нужно умножить его на 2 или даже больше раз.

Итак, я полагаю, ваша проблема заключается в достижении предела памяти вашим скриптом. Вот почему он работает для одного результата и не работает для всех результатов. Существует одно обходное решение этой проблемы – используйте функцию mysql_* так, как вам нужно:

 $result = @mysql_query( "SELECT item, datas FROM trading_datas", $wpdb->dbh ); if ( $result ) { while ( ( $row = @mysql_fetch_array( $result, MYSQL_ASSOC ) ) ) { // do stuff here for each result ... } @mysql_free_result( $result ); }