|
Есть ли тип данных порядок?
|
|||
---|---|---|---|
#18+
Вот есть задача хранить порядок строк. Чтобы можно было быстро и удобно менять их местами. И если создать столбец order с типом integer, то при изменении значения order в какой то строке, другие значения в столбце не пересчитываются. Например есть таблица: Код: plaintext 1. 2. 3. 4.
Дальше мы меняем в строке 3 порядок на 1. И получается Код: plaintext 1. 2. 3. 4.
А нужно пересчитать порядок остальных строк тоже Код: plaintext 1. 2. 3. 4.
Как правильней это организовать? Можно ли это сделать без пересчёта всех остальных значений? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2017, 11:27 |
|
Есть ли тип данных порядок?
|
|||
---|---|---|---|
#18+
mankingВот есть задача хранить порядок строк. Чтобы можно было быстро и удобно менять их местами. И если создать столбец order с типом integer, то при изменении значения order в какой то строке, другие значения в столбце не пересчитываются. Например есть таблица: Код: plaintext 1. 2. 3. 4.
Дальше мы меняем в строке 3 порядок на 1. И получается Код: plaintext 1. 2. 3. 4.
А нужно пересчитать порядок остальных строк тоже Код: plaintext 1. 2. 3. 4.
Как правильней это организовать? Можно ли это сделать без пересчёта всех остальных значений? Вариантов как всегда - несколько 1)Использовать более подходящий тип столбца сортировки Например, Код: sql 1.
2) Код: sql 1.
с инкрементом по 100 к примеру, позволит достичь примерно того же, что и в первом случае. 3) Код: sql 1.
тип с максимальной точностью и туда пихать при записи clock_timestamp() тоже можно,но желательно, если вставка идёт по одной записи, иначе некоторые значения будут одинаковыми. 4) Использовать ссылки на предыдущую запись и на следующую запись(2 внешних ключа). Лучше сделать необязательные (для удобства изменения сортировки). И чтобы каскадно проставлялись NULL при удалении записи обязательно. Селекты будут чутка посложнее,больше места для хранения потребуется, но и переписывать много не надо при изменении сортировок. Как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2017, 11:49 |
|
Есть ли тип данных порядок?
|
|||
---|---|---|---|
#18+
Я это решал апдейтом типа такого: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2017, 12:44 |
|
Есть ли тип данных порядок?
|
|||
---|---|---|---|
#18+
mankingВот есть задача хранить порядок строк. Дальше мы меняем в строке 3 порядок на 1. И получается Код: plaintext 1. 2. 3. 4.
А нужно пересчитать порядок остальных строк тоже Код: plaintext 1. 2. 3. 4.
По какому параметру надо перестраивать строку и порядок? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2017, 12:46 |
|
Есть ли тип данных порядок?
|
|||
---|---|---|---|
#18+
Alexander A. SakЯ это решал апдейтом типа такого: Код: plsql 1. 2. 3. 4.
В case нужно не обменивать, а устанавливать старое значение в новое. Остальные строки между least и greatest добавлять 1 или вычитать 1 в зависимости от отношения старое-новое значение. Но вариант с делимым шагом предпочтительнее, так как требуется только выборка двух строк, между кем вставка, и апдейт одной строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2017, 15:58 |
|
|
start [/forum/topic.php?fid=53&fpage=69&tid=1996318]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 312ms |
total: | 450ms |
0 / 0 |