Не уверен, что лучший способ описать то, что я пытаюсь сделать, так что терпите меня. Я работаю в PHP с базой данных MySQL.
У меня есть база данных 10000 записей. Предположим, я хочу обновлять 10000/365 каждый день в течение года. Каждая запись обновляется 1 раз в год и красиво распространяется в течение года.
Один из простых способов сделать это — выбрать все записи, а затем для каждой, если идентификатор% 365 = $ day_of_year, обновить эту запись. Я не беспокоюсь о високосном году.
Есть ли способ, которым я могу выбрать только те записи из базы данных, которые мне нужны (около 27), вместо того, чтобы выбирать все 10000 и проходить по каждой? Это работа cron, которую я буду выполнять среди ночи, так что, возможно, это спорный вопрос. Тем не менее, это беспокоит меня, что я должен грубой силой пройти через все 10000. Хотелось бы найти более элегантное решение, потянув лишь крошечную дробь, необходимую.
Добавьте столбец в вашу таблицу, указав день года, когда запись должна быть обновлена.
Затем добавьте событие, которое запускается один раз в год, которое сбрасывает значения этого столбца и вычисляет его новым — 10000 записей распределяются по дням года.
Затем добавьте еще одно событие, которое выполняется каждую ночь, обновляя записи за день.
Спасибо за ответ, особенно Юрген и Майк Помакс. Вот решение.
Я добавил новый столбец и заполнил каждую строку случайным значением от 0 до 364. Я мог бы заполнить его другим способом, но это было легко и достаточно близко.
Вот мой псевдокод:
$day_of_year = date('z');
if($day_of_year < 365){ //don't do on Dec 31 of leap year
$qry = "Select ... WHERE ID = $day_of_year";
... //do my thing
}
Работает отлично. Еще раз спасибо.