Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT INTO из SELECT (но, только изменившиеся данные) / 8 сообщений из 8, страница 1 из 1
07.01.2019, 23:18
    #39756603
linki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO из SELECT (но, только изменившиеся данные)
Таблица 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
08.01.2019, 11:58
    #39756703
Megabyte
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO из SELECT (но, только изменившиеся данные)
linkiТ.е. ПРОБЛЕМА:
Нужно вставить только изменившиеся score для каждого article_id.
Ну так и вставляйте в таблицу истории только когда значение изменилось!
Зачем все вставлять?
...
Рейтинг: 0 / 0
08.01.2019, 16:04
    #39756785
linki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO из SELECT (но, только изменившиеся данные)
Megabyte,
поэтому и спрашиваю.
...
Рейтинг: 0 / 0
08.01.2019, 21:41
    #39756869
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO из SELECT (но, только изменившиеся данные)
Варианты:

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

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

3) Курсор в хранимой процедуре. Фактически то же, что и метод 1, но итерационно. И, скорее всего, ресурсоёмко. Не советую.
...
Рейтинг: 0 / 0
09.01.2019, 08:41
    #39756963
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO из SELECT (но, только изменившиеся данные)
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
10.01.2019, 20:50
    #39758134
linki
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO из SELECT (но, только изменившиеся данные)
Большое спасибо за ответы.

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


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