sql update

Главные вкладки

Аватар пользователя julia_leo julia_leo 6 октября 2008 в 9:44

Делаю постраничный вывод, при просмотре записи, в базу должен записываться количество просмотров, т.е. делаться инкремент. При просмотре всех страниц, кроме 1, все записывается нормально, но для записей с 1 страницы выполняется инкремент при просмотре любой страницы. Т.е при просмотре 2, 3.. страниц также срабатывает запрос на инкремент для 1. Но просмотр 3 страницы вызывает инкремент 3 и 1, 2 не инкрементируется. Не могу понять, чем это вызвано

pager_query(...);
while(...)
{
  ...
   $result = db_query('UPDATE {content_type_tabel} SET field_show_value=%d WHERE nid = %d',   $viewed, $nid);
 
}
   $output .= theme('table', $header, $rows);
  $output .= theme('pager', NULL, 50, 0);

Комментарии

Аватар пользователя zhylik zhylik 6 октября 2008 в 13:42

хм. попробуйте сделать как написал ниже. Должно работать и кол-во запросов update сократится с 50 до 1:

  // Список идентификаторов нод для обновления
  $viewed_nids = array();
  // Флажок "просмотрена хотябы 1 нода"
  $viewed_nids_count = FALSE;

  pager_query(...);
  while(...) {
    ...
    $viewed_nids[] = $nid;
    $viewed_nids_count = TRUE;
  }

  if ($viewed_nids_count) {
    // Инкрементируем те записи, ноды которых были просмотрены
    db_query('UPDATE {content_type_tabel} SET field_show_value=field_show_value+1 WHERE nid IN ('. implode(',', $viewed_nids) .')');
  }

  $output .= theme('table', $header, $rows);
  $output .= theme('pager', NULL, 50, 0);

и еще было бы полезно сделать print_r($viewed_nids) где-нить перед "$output .= theme('table'"... для проверки на странные nid...