powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложная сортировка выборки, нужна помощь
14 сообщений из 14, страница 1 из 1
Сложная сортировка выборки, нужна помощь
    #39907757
poiuytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

имеется таблица с данными

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE TABLE `test_table` (
  `id1` int(11) NOT NULL,
  `id2` int(11) NOT NULL,
  `mark` int(11) NOT NULL,
  `type` tinyint(1) NOT NULL,
  `time` datetime NOT NULL,
  `update` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `test_table` (`id1`, `id2`, `mark`, `type`, `time`, `update`) VALUES
(10001, 1, 10090, 0, '2019-12-25 12:00:01', 0),
(10001, 2, 10090, 2, '2019-12-25 12:00:01', 0),
(10001, 3, 10090, 0, '2019-12-25 11:00:00', 0),
(10001, 4, 10090, 2, '2019-12-25 11:01:00', 0),
(10001, 5, 10091, 2, '2019-12-25 11:02:00', 0),
(10001, 6, 10092, 0, '2019-12-25 11:03:00', 0),
(10001, 7, 10090, 2, '2019-12-25 11:04:00', 0),
(10001, 8, 10090, 0, '2019-12-25 11:05:00', 0),
(10001, 9, 10090, 2, '2019-12-25 11:06:00', 0),
(20002, 1, 10090, 2, '2019-12-25 12:11:00', 0),
(20002, 2, 20090, 0, '2019-12-25 12:12:00', 0),
(20002, 3, 20090, 2, '2019-12-25 12:13:00', 0),
(20002, 4, 20091, 2, '2019-12-25 12:14:00', 0),
(20002, 5, 20092, 2, '2019-12-25 12:15:00', 0),
(30090, 7, 31090, 2, '2019-12-25 11:00:00', 0),
(40090, 5, 41090, 2, '2019-12-25 11:00:00', 0);

ALTER TABLE `test_table`
  ADD UNIQUE KEY `id` (`id1`,`id2`),
  ADD KEY `mark` (`mark`),
  ADD KEY `type` (`type`),
  ADD KEY `update` (`update`);
COMMIT;



Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке:

1. по возрастанию количества `mark`
2. по возрастанию `time` (в пределах одного `mark`)

В ожидаемом результате, должны обновиться следующие записи:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
1 (20002, 3, 20090, 2, '2019-12-25 12:13:00'),

2 (10001, 5, 10091, 2, '2019-12-25 11:02:00'),

3 (20002, 4, 20091, 2, '2019-12-25 12:14:00'),

4 (20002, 5, 20092, 2, '2019-12-25 12:15:00'),

5 (30090, 7, 31090, 2, '2019-12-25 11:00:00'),

6 (40090, 5, 41090, 2, '2019-12-25 11:00:00');

7 (10001, 4, 10090, 2, '2019-12-25 11:01:00'),
8 (10001, 7, 10090, 2, '2019-12-25 11:04:00'),



Прошу помочь с запросом, всю голову сломал
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907762
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poiuytrewq,

order by mark, time ?
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907802
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если отобрать записи с `type` = 2 и отсортировать их по возрастанию количества `mark`и по возрастанию `time` (в пределах одного `mark`), то выборка будет такая ( fiddle ):

id1id2marktypetimeupdateОбновлять?1000141009022019-12-25 11:01:000yes1000171009022019-12-25 11:04:000yes1000191009022019-12-25 11:06:000no1000121009022019-12-25 12:00:010no2000211009022019-12-25 12:11:000no1000151009122019-12-25 11:02:000yes2000232009022019-12-25 12:13:000yes2000242009122019-12-25 12:14:000yes2000252009222019-12-25 12:15:000yes3009073109022019-12-25 11:00:000yes4009054109022019-12-25 11:00:000yes
А вот теперь подробно объясняйте, почему та или иная запись должна или не должна обновиться.
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907803
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poiuytrewq
Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке

В этом тебе update не помощник. Загонять выборку в цикл, обновлять по одной.
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907809
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poiuytrewq,

я ничего не понял, сформулируй заново.
у тебя 11 записей с type = 2, а обновить надо 8. По какому правилу это надо сделать?
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907857
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
В этом тебе update не помощник. Загонять выборку в цикл, обновлять по одной.
Сфига бы? нормально всё обновляется... и не такие замороченные алгоритмы реализовывали. Правда, те были хотя бы понятные.
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907861
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
crutchmaster
В этом тебе update не помощник. Загонять выборку в цикл, обновлять по одной.
Сфига бы? нормально всё обновляется... и не такие замороченные алгоритмы реализовывали. Правда, те были хотя бы понятные.

Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке
порядке

Update гарантирует порядок обновления?
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907881
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Update гарантирует порядок обновления?
А на что он влияет - порядок обновления-то?

И да - запрос на обновление, в котором источником данных является одна таблица (коррелированные подзапросы не учитываются), при наличии предложения ORDER BY гарантирует порядок. Правда, не обновления (в каком порядке обновление пройдёт физически, определяют кэш блоков и дисковая подсистема), а порядок записей, для которых выполняется расчёт обновляемых значений. В частности, на этом основано использование локальных переменных в запросах на обновление. И это даже документировано - single-table UPDATE syntax содержит ORDER BY clause.
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39907882
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poiuytrewq
Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке:
а какая разница в каком порядке будут расставлены эти единички?
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39908025
poiuytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
А вот теперь подробно объясняйте, почему та или иная запись должна или не должна обновиться.


Ваша выборка не удовлетворяет условию, по возрастанию к-ва `mark`, возможно, я не точно выразился, но я привёл ожидаемый результат... записи, для которых к-во `mark` больше, должны быть ближе к окончанию выборки, тогда как в вашем примере, наоборот... поскольку записей в таблице больше, чем необходимо обновить, то, необходимо использовать оператор LIMIT, типа, UPDATE ... ORDER BY ... LIMIT 8 При этом, при сортировке записей по к-ву `mark`, порядок должен быть по возрастанию `time`
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39908028
poiuytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
poiuytrewq
Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке:
а какая разница в каком порядке будут расставлены эти единички?


Разница не в порядке единичек, просто в таблице большое количество записей, и, необходимо выбрать небольшую часть, и, именно в этом порядке
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39908114
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
poiuytrewq
возможно, я не точно выразился
Я бы сказал - лаконично до невменяемости.

poiuytrewq
я привёл ожидаемый результат...
От тебя просят ОБЪЯСНЕНИЯ, ПОЧЕМУ ТАК.
poiuytrewq
записи, для которых к-во `mark` больше, должны быть ближе к окончанию выборки, тогда как в вашем примере, наоборот
Общее количество записей с одинаковым `mark` во всей таблице, что ли?

Вот так: fiddle ?
Если так - указывай ТОЧНО версию MySQL.
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39908247
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
А на что он влияет - порядок обновления-то?

Да я откуда знаю. Может у ТСа там тригеры, которым это важно. Он не говорит ничего.
В любом случае на порядок операций надеяться не нужно.
...
Рейтинг: 0 / 0
Сложная сортировка выборки, нужна помощь
    #39908365
poiuytrewq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

спасибо, то, что нужно
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложная сортировка выборки, нужна помощь
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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