|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
Добрый день, имеется таблица с данными Код: 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.
Необходимо обновить 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.
Прошу помочь с запросом, всю голову сломал ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 10:26 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
poiuytrewq, order by mark, time ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 10:32 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
Если отобрать записи с `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 А вот теперь подробно объясняйте, почему та или иная запись должна или не должна обновиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 11:28 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
poiuytrewq Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке В этом тебе update не помощник. Загонять выборку в цикл, обновлять по одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 11:34 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
poiuytrewq, я ничего не понял, сформулируй заново. у тебя 11 записей с type = 2, а обновить надо 8. По какому правилу это надо сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 11:37 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
crutchmaster В этом тебе update не помощник. Загонять выборку в цикл, обновлять по одной. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 12:56 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
Akina crutchmaster В этом тебе update не помощник. Загонять выборку в цикл, обновлять по одной. Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке порядке Update гарантирует порядок обновления? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 13:01 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
crutchmaster Update гарантирует порядок обновления? И да - запрос на обновление, в котором источником данных является одна таблица (коррелированные подзапросы не учитываются), при наличии предложения ORDER BY гарантирует порядок. Правда, не обновления (в каком порядке обновление пройдёт физически, определяют кэш блоков и дисковая подсистема), а порядок записей, для которых выполняется расчёт обновляемых значений. В частности, на этом основано использование локальных переменных в запросах на обновление. И это даже документировано - single-table UPDATE syntax содержит ORDER BY clause. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 13:37 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
poiuytrewq Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке: ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 13:37 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
Akina А вот теперь подробно объясняйте, почему та или иная запись должна или не должна обновиться. Ваша выборка не удовлетворяет условию, по возрастанию к-ва `mark`, возможно, я не точно выразился, но я привёл ожидаемый результат... записи, для которых к-во `mark` больше, должны быть ближе к окончанию выборки, тогда как в вашем примере, наоборот... поскольку записей в таблице больше, чем необходимо обновить, то, необходимо использовать оператор LIMIT, типа, UPDATE ... ORDER BY ... LIMIT 8 При этом, при сортировке записей по к-ву `mark`, порядок должен быть по возрастанию `time` ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 19:26 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
miksoft poiuytrewq Необходимо обновить 8 записей (SET `update` = 1), где `type` = 2 в следующем порядке: Разница не в порядке единичек, просто в таблице большое количество записей, и, необходимо выбрать небольшую часть, и, именно в этом порядке ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 19:30 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
poiuytrewq возможно, я не точно выразился poiuytrewq я привёл ожидаемый результат... poiuytrewq записи, для которых к-во `mark` больше, должны быть ближе к окончанию выборки, тогда как в вашем примере, наоборот Вот так: fiddle ? Если так - указывай ТОЧНО версию MySQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 22:08 |
|
Сложная сортировка выборки, нужна помощь
|
|||
---|---|---|---|
#18+
Akina А на что он влияет - порядок обновления-то? Да я откуда знаю. Может у ТСа там тригеры, которым это важно. Он не говорит ничего. В любом случае на порядок операций надеяться не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2019, 05:16 |
|
|
start [/forum/topic.php?fid=47&fpage=27&tid=1828801]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 168ms |
0 / 0 |