powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / И опять про нумерацию строк
2 сообщений из 2, страница 1 из 1
И опять про нумерацию строк
    #38830107
ZayatsZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE categories (
    category_id integer NOT NULL,
    parent_id integer DEFAULT 0,
    title character varying(200),
    position integer DEFAULT 0
);


Используется для организации иерархии неких категорий, без ограничения уровня вложенности. Недавно было добавлено поле position для возможности произвольного порядка вывода подкатегорий, оно уникально в рамках одного parent_id. То есть используется запрос:
Код: plsql
1.
SELECT * FROM categories WHERE parent_id=... ORDER BY position


К моменту добавления этого поля в таблице уже было прилично так записей, так что ручное первоначальное прописывание значений position - не вариант.

Нужно как-то автоматически заполнить это поле возрастающими от 1 значениями внутри из каждой подкатегории. То есть, например, при выполнении запроса
Код: plsql
1.
SELECT *, row_number() over() as rn FROM categories WHERE parent_id=... ORDER BY category_id


выводится последовательность в поле rn.

Так вот можно написать какой-нибудь хитрый UPDATE, чтобы первоначально эту самую последовательность записать в поле position?
...
Рейтинг: 0 / 0
И опять про нумерацию строк
    #38830307
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZayatsZ,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
WITH
tt00 AS (
SELECT
  bb.zz AS category_id,
  CAST(RANDOM() * 10 + 1 AS INTEGER) parent_id
FROM generate_series(1, 100) bb(zz)
),

tt01 AS (
SELECT
  category_id,
  parent_id,
  row_number() OVER(partition BY parent_id ORDER BY category_id) AS f1
FROM tt00
)

UPDATE categories t1 SET 
  position = tt01.f1
FROM tt01
WHERE tt01.category_id = t1.category_id;
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / И опять про нумерацию строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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