powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT INTO из SELECT (но, только изменившиеся данные)
8 сообщений из 8, страница 1 из 1
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39756603
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица article_score_history (история оценок статьи):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE IF NOT EXISTS `article_score_history` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `article_id` mediumint(8) unsigned NOT NULL,
  `score` tinyint(4) NOT NULL,
  `dt` date NOT NULL,
  PRIMARY KEY (`id`),
  KEY `article_id` (`article_id`)
) ENGINE=MyISAM;


Часть таблицы article (статьи):

Код: plaintext
1.
2.
3.
4.
CREATE TABLE IF NOT EXISTS `article` (
  `id` mediumint(8) unsigned NOT NULL,
  `score` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM ;



Вставляю ВСЕ данные score из таблицы article в article_score_history:

Код: plaintext
1.
2.
INSERT INTO article_score_history (article_id, score, dt)
SELECT id, score, NOW()
FROM  article 

Работает.
Но, оценки сразу ВСЕХ статей меняются не часто.
Не нужно постоянно дублировать не изменившуюся оценку для каждой статьи: 5 5 3 3 3 5 5 5 5 7.
Достаточно записей: 5 3 5 7.

Т.е. ПРОБЛЕМА:
Нужно вставить только изменившиеся score для каждого article_id.

Т.е. проверить последнее добавленное score в article_score_history. Если оно отличается от нового article.score - добавить новую запись.
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39756703
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linkiТ.е. ПРОБЛЕМА:
Нужно вставить только изменившиеся score для каждого article_id.
Ну так и вставляйте в таблицу истории только когда значение изменилось!
Зачем все вставлять?
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39756785
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Megabyte,
поэтому и спрашиваю.
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39756869
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Варианты:

1) Вставлять только изменившиеся данные. Получите такие данные в SELECT - это несложно,- а потом добавьте INSERT INTO. Запрос элементарен.

2) Вставлять всё. Потом удалять данные, если предыдущие по времени такие же (и пофиг, когда вставлено). Удаление дубликатов в форуме обсуждалось неоднократно. Всего-то и делов, что добавить сортировку.

3) Курсор в хранимой процедуре. Фактически то же, что и метод 1, но итерационно. И, скорее всего, ресурсоёмко. Не советую.
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39756963
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
linki,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
insert into article_score_history (article_id, score, dt)
select 
  id, score, now()
from
 (
  select id, score from article
  except
  select 
   t.article_id, article_id.score
  from 
   ( 
    select article_id, score, row_number() over (partition by order by dt desc) rn
    from 
      article
      inner join article_score_history on article.id = article_id
   ) t
  where rn = 1
 )
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39758134
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответы.

Swa111,
row_number() - не подходит для MySQL.
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39758173
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linkirow_number() - не подходит для MySQLА мужики-то не знают...
Window Function Descriptions .
...
Рейтинг: 0 / 0
INSERT INTO из SELECT (но, только изменившиеся данные)
    #39759975
linki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
моя вина. Не обновил еще до 8 версии :(
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT INTO из SELECT (но, только изменившиеся данные)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]