DANFA

Как обновлять счётчик записей

Для точного пересчёта счётчика каких либо записей, буду использовать функцию: updateCount библиотеки: database.

Допустим, нам необходимо пересчитать количество комментариев у фотографии. Делаем так:
$this->database()->updateCount(
	'comment',
	'parent_id = 0 AND type_id = \'photo\' AND item_id = ' . (int) $photo['photo_id'],
	'total_comment',
	'photo',
	'photo_id = ' . (int) $photo['photo_id']
);

Функция имеет пять параметров:
  1. Название таблицы, в которой будет пересчитывать записи.
  2. Строка запроса: По каким параметрам считать записи.
  3. Поле: Счётчик, который необходимо обновить.
  4. Название таблицы, где будет обновлён счётчик.
  5. Строка запроса: Счётчик какой записи обновлять.

Тут будет пересчёт всех существующих записей, с указанными параметрами выборки, после чего обновится указанное поле.

В phpFox есть ещё один вариант обновления счётчика, который просто добавляет единицу, либо отнимает единицу, от количества записей. Допустим, задача та же, обновления счётчика комментов у фотографии. Делаем так:
$this->database()->updateCounter(
	'photo',
	'total_comment',
	'photo_id',
	$photo['photo_id']
);

Тут функция updateCounter принимает четыре параметра:
  1. Название таблицы, в котором находится поле для обновления.
  2. Название поля, что будем обновлять.
  3. По какому полю находим нужную запись.
  4. Что должно соответствовать полю.

В данном случае, значение: total_comment станет на единицу больше. Чтобы значение стало на единицу меньше, необходимо вставить пятый параметр (true) в функцию:
$this->database()->updateCounter(
	'photo',
	'total_comment',
	'photo_id',
	$photo['photo_id'],
	true
);


Когда использовать тот или иной способ обновления счётчика?: Например, при добавлении одного комментария, или лайка, я бы использовал вариант с добавлением единицы, так и с удалением коммента и дизлайком, отнимал бы единицу (updateCounter). А когда надо обновить счётчик, скажем, после каких либо ошибок на сайте, что могло привести к неправильной статистике, тогда в ход пускать уже полный пересчёт и обновление (updateCount).

Кстати, в движке, во многих местах, где логичнее, на мой взгляд, было бы использовать метод updateCounter, используется updateCount.
Автор:  26.02.2025 10:01:27 pm