Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
есть две таблицы: структура первой Таблица "public.test" Колонка | Тип | Модификаторы ----------+-----------+-------- id | integer | steps_id | integer[] | данные из первой id | steps_id ----+----------- 1 | {2,4,6,8} 2 | {3,5,7,9} 4 | {9,8,7} 3 | {3,4,5} (записей: 4) структура второй Таблица "public.steps" Колонка | Тип | Модификаторы ------+------------------------+---------------------------------------------------- id | integer | not null default nextval('steps_id_seq'::regclass) step | character varying(255) | данные из второй id | step ----+--------- 1 | step 1 2 | step 2 3 | step 3 4 | step 4 5 | step 5 6 | step 6 7 | step 7 8 | step 8 9 | step 9 10 | step 10 11 | step 11 12 | step 12 13 | step 13 14 | step 14 15 | step 15 (записей: 15) требуется написать запрос, чтобы запрашивая по id из первой таблицы получать перечень шагов из второй. запрос SELECT step FROM steps WHERE id = ANY(ARRAY[2,5,7]); делает, что мне надо, но у меня не получается вместо ARRAY[2,5,7] подставить SELECT steps_id FROM test WHERE id = 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2008, 21:51 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
эту задачу решил, но возникла ещё более сложная. т.к. надо выводить записи из таблицы steps именно в той последовательности в которой они представлены в массиве, пришлось сделать массив массивов вида {{1,10}, {2,11} , {3,12}, {4,13}, {5,14}, {6,15}} где первые элементы показывают порядковый номер (чтоб по ним можно было сортировать) а вторые id для связки с таблицой steps. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2008, 12:21 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
Если такая задача, то проще сделать составной тип и массив составного типа в первой таблице. Вторая таблица не нужна. Вы одним запросом получите одну запись, в которой будет содержаться вся информация о шагах, в нужном Вам порядке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 12:05 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
toantonструктура первой Таблица "public.test" Колонка | Тип | Модификаторы ----------+-----------+-------- id | integer | steps_id | integer[] | данные из первой id | steps_id ----+----------- 1 | {2,4,6,8} 2 | {3,5,7,9} 4 | {9,8,7} 3 | {3,4,5} (записей: 4)используйте вместо массивов таблицу связей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 12:35 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
большое спасибо откликнувшимся. MySQLCraft насколько я понял я не могу создавать массивы из созданных мной типов. CREATE TYPE steps_array AS (id INT, sort_order INT); CREATE TABLE test3 (id INT, steps_id steps_array[]); ERROR: type "steps_array[]" does not exist LeXa NalBat в задаче я упустил, что мне надо хранить историю. т.е. мне гораздо удобней хранить в первой таблице массив или созданный тип чем некое количество записей с одинаковыми id, но если ничего с составными типами не получится придется так и сделать. Имея одну строку я могу у id использовать тип SERIAL, а так придется лочить таблицу и придумывать, что то с приращением id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 14:55 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
toantonв задаче я упустил, что мне надо хранить историю. т.е. мне гораздо удобней хранить в первой таблице массив или созданный тип чем некое количество записей с одинаковыми id, но если ничего с составными типами не получится придется так и сделать. Имея одну строку я могу у id использовать тип SERIAL, а так придется лочить таблицу и придумывать, что то с приращением id.не надо "лочить таблицу и придумывать, что то с приращением id" test ( id serial primary key, name text ) steps ( id serial primary key, name text ) test_steps ( ordr serial primary key, test_id integer references test.id, step_id integer references steps.id ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2008, 15:04 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
toantonбольшое спасибо откликнувшимся. MySQLCraft насколько я понял я не могу создавать массивы из созданных мной типов. CREATE TYPE steps_array AS (id INT, sort_order INT); CREATE TABLE test3 (id INT, steps_id steps_array[]); ERROR: type "steps_array[]" does not exist LeXa NalBat в задаче я упустил, что мне надо хранить историю. т.е. мне гораздо удобней хранить в первой таблице массив или созданный тип чем некое количество записей с одинаковыми id, но если ничего с составными типами не получится придется так и сделать. Имея одну строку я могу у id использовать тип SERIAL, а так придется лочить таблицу и придумывать, что то с приращением id. Обнови версию. В 8.3.4 это работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2008, 17:34 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
да, спасибо разобрался. обновил до 8.3. массивы созданных мной типов заработали. все создал, но не знаю как их дергать, и вообще закрались сомнения в правильности хода моих мыслей. :) поясню задачу целиком т.к. изначально описал только часть. таблица 1 (список столов) table_id - id стола version - версия (для истории) table_desc - описание стола box_id - какой ящик прикреплен к столу (в данной версии) таблица 2 box_id ящика в столе items_array[] массив предметов хранящихся в ящике стола (структура массива: id предмета, sort_order его порядковый номер т.к. выводить предметов надо в опр. последовательности) таблица 3 id предмета item_desc описание предмета основная возникшая сложность, это как лучше хранить историю. Можно было бы хранить все без массивов, но при любом изменении в перечне предметов или их количестве пришлось бы создавать кучу записей, а так создается только одна запись с массивом, но зато возникает проблема как построить въюху с последними версиями предметов в столе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2008, 21:47 |
|
||
|
массив в подзапросе.
|
|||
|---|---|---|---|
|
#18+
структура БД без использования массивов table1 (table_id,version) -- primary key box_id -- references table2 table_desc table2 box_id -- primary key table3 item_id -- primary key item_desc table4 box_id -- references table2 item_id -- references table3 (box_id,item_id) -- primary key sort_order -- порядковый номер item_id внутри данного box_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2008, 12:58 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35606372&tid=2003954]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 371ms |

| 0 / 0 |
