Форум » Вебмастер и вебдизайн » Языки программирования » PHP + MySQL - массив с циклом, апдейт записей БД
Открыть Ответить

PHP + MySQL - массив с циклом, апдейт записей БД

0.00

0.00

1
18.09.2018 21:49:00 19.09.2018 17:09:06

Вопрос. Не совсем по движку.
Нужно обновить поле time во всех записях таблицы.
Вытащил выборку (id, time) в массив, и циклом сделал апдейт всех записей.

В итоге массив у меня содержал примерно 5000 записей.
А как поступают при записях в десятки или сотни тысяч?

Группа
Клиент
Пункты
32504
Регистрация
06.05.2011
Пол
Мужчина
Предупреждения
Нет
olevpa
olevpa
4.02

4.02

19.09.2018 17:24:30 19.09.2018 17:35:37

Почему заинтересовались данным вопросом?

Несколько лёгких/простых запросов в базу данных от одного пользователя, в нашем варианте, администратора/модератора не является проблемой! Сложности возникают, если этих пользователей становится более сотни, получаем 100 * 5000 = 500 000 запросов в базу данных Смайл - 13

В таком случае следует продумать логику составления запросов в БД. Можно воспользоваться хитрым методом, одного запроса. Ниже простой пример из справочника по системе:

Запрос, который удалит всех зарегистрированных пользователей, использующих IP адрес: 193.201.225.104. Данная возможность полезна для массового удаления спам ботов в случае их регистрации.

DELETE FROM {pref}_users WHERE user_last_ip = "193.201.225.104";


В данном запросе в базу данных, движок MySQL пройдётся по всем записям таблицы и соответственно проверит их на соответствие, при необходимости удалит. В этом варианте отпадает функция цикла PHP, что в свою очередь значительно ускоряет процесс.

Всем известная мудрость, самый короткий путь, как правило, является самым быстрым, но это в идеальных условиях! Как и везде есть свои нюансы, нужно ориентироваться по ситуации и исходить из поставленной задачи/цели.


О сколько нам открытий чудных,
Готовит просвещенья дух,
И опыт, сын ошибок трудных,
И гений, парадоксов друг...
Группа
Клиент
Пункты
39686
Регистрация
30.04.2005
Пол
Мужчина
Из
Germany
Предупреждения
Нет
SLAED CMS
SLAED CMS
3.24

3.24

19.09.2018 21:44:30 19.09.2018 21:48:22

Та тут такой частный случай получился.
Вывод товаров в магазине идёт в порядке добавления их в базу с сортировкой по времени.
Так случилось, что большинство товаров было добавлено с интервалом 1 или ноль секунд.
И в один прекрасный момент человек, который добавлял товар ошибся.
И чтобы исправить ошибку. ему теперь требуется воткнуть товары в определённый временной интервал. А так как дельта для манёвров нулевая, то в случае их добавления потребуется корректировка времени у других (соседних) товаров.

Поэтому я взял выборку с order by time desc и затем автоматически переназначил всем новое время с интервалом в 5 секунд.

Сначала попробовал напрямую через whlie () { update }, но так как сортировка выборки была по обновляемому полю, то система глюканула.
Поэтому пришлось добавить массив в качестве временного буфера.

По поводу огромных баз.
Недавно начал реализовывать одну идею. Всё было хорошо, пока не пришло время точных подсчётов и тут расчёты выдали, что база должна содержать 566.111.106 записей.
Я даже не представляю как это реализовать, поэтому решил отложить и работать с "лёгкой" версией - в 644.506 записей. А с большой - решать проблемы по мере поступления.

Группа
Клиент
Пункты
32504
Регистрация
06.05.2011
Пол
Мужчина
Предупреждения
Нет
olevpa
olevpa
4.02

4.02

Открыть Ответить
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код