С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218

Как лучше хранить массив в базе?

11.08.2015, 09:15. Показов 1410. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Блин, так не хотелось новую тему открывать.. Вопрос пустяковый, собсно.

Есть табличка в две колонки (номер | человеческое название). Я хочу сформировать выборку из нескольких элементов и сохранить её в базе на будущее. В каком виде её записать?

[sqlite/firedac]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2015, 09:15
Ответы с готовыми решениями:

Как лучше хранить в базе вычисляемое поле даты и времени
Вообщем ситуация такая - нужно в базе хранить поле, разницу двух дат, причем с условием. Каким способом это лучше реализовать ? Слышал в...

Хранить разные файлы в базе
Здравствуйте можно ли хранить разные файлы в БД например HTML? И если можно то как их туда запихать, а потом и вытащить и запустить.

Пятиуровневый массив в базе - как лучше хранить?
Добрый день Требуется организовать хранение массива с пятиуровневым вложением, с доступностью на редактирование (а так-же создание)...

16
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
11.08.2015, 09:29
Цитата Сообщение от Postscripter Посмотреть сообщение
В каком виде её записать?
В виде аналогичной таблицы.
SQL
1
2
3
CREATE TABLE tab2
AS
SELECT ...
1
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
11.08.2015, 10:50
1. можно сохранять условие фильтрации и восстанавливать рекордсет по запросу
2. можно завести таблицу2 , где достаточно хранить всего лишь ID из таблицы1
3. если фильтров несколько, то появляется таблица3 - справочник фильтров и в таблице2 еще одно поле - ID фильтра
1
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 12:22  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
В виде аналогичной таблицы.
Хм, разумно... И наверное удобно. Но всё-таки калибр крупноват, по целой таблице на небольшую кучку чисел [1,2,99,32768,.....]. А если выборок будет сто, тысяча.. Ой.

Цитата Сообщение от krapotkin Посмотреть сообщение
если фильтров несколько, то появляется таблица3 - справочник фильтров и в таблице2 еще одно поле - ID фильтра
Да, фильтров больше 1. Что ж, наверное, придётся делать так. Спасибо.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,657
Записей в блоге: 21
11.08.2015, 13:46
на самом деле, предпочтительный вариант - 1-й + таблица3
он самый гибкий и удобный
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 15:14  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
предпочтительный вариант - 1-й
Фильтрации не предполагается, мне эти данные не в контрол выводить, а дальше обрабатывать, в т.ч. включать в следующий запрос.

Добавлено через 17 минут
Или я не то имею в виду. Фильтрация - это где? Как её сохранять?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.08.2015, 15:27
А что, Ваша БД запросы сохранять не умеет? TSQLQuery тогда, текст запроса сохраняешь как запись в ещё одной таблице, когда нужна старая выборка, то читаешь из таблицы текст запроса, скармливаешь его TSQLQuery, получаешь выборку. Или речь о том, что сами данные могли за это время измениться, а надо показать выборку именно в том виде, какой она бала тогда? То есть могли добавиться новые удовлетворяющие условию записи, или ранее существовавшие, но не удовлетворявшие условию могли стать удовлетворяющими условию, но показать старую выборку надо без них, в ранее отобранных полях могли измениться отображаемые данные и надо отобразить со старыми данными, ранее удовлетворявшие условию записи могли быть удалены, или перестать удовлетворять условию, но их всё равно надо показать? Тогда придётся сохранять в специальную таблицу. С одним, или несколькими дополнительными полями с информацией о выборке. Например, с датой и временем, состояние на которые сохраняется.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 16:18  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
когда нужна старая выборка, то читаешь из таблицы текст запроса
Тут слово "выборка" в другом контексте, прошу прощения, если ввёл в заблуждение. Выборка делается вручную, галочками возле соответствующих записей. Можно выбрать первый, десятый и 25-й. После чего массив (1,10,25) сохраняется в ini-файл. В следующий раз достаточно загрузить этот ini-файл, чтобы программа достала из базы 1-й, 10-й и 25-й объекты. Понятно, что файлы - не true, поэтому хочется перенести всё в БД.

Наверное, выше названые варианты наиболее оптимальны. В смысле, что других нет, кроме костыльных
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.08.2015, 16:31
Не важно, как и кем/чем условие проверяется. Как только галочки расставлены, можно составить запрос на выборку по условию, эквивалентному тому, по которому расставлены галочки. Например
SQL
1
SELECT * FROM Tab WHERE ((id=1)OR(ID=10)OR(ID=25));
. Этот текст запроса сначала генерим в программе на основании галочек, а потом сохраняем в базу. Но потом некоторые поля ранее отобранных записей поменялись. Надо ли вывести их со старыми, или с новыми значениями? Если с новыми, то эйси, если же со старыми, то надо где то сохранить сами данные по состоянию на момент расстановки галочек.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 16:46  [ТС]
С новыми. И всё-таки, я настаиваю, слово "выборка" здесь имеет другое значение. Это не результат работы select, не набор кортежей. Это массив чисел. Из этого массива можно формировать столько select-ов (разных), сколько потребуется. Если нужно будет выбирать не только из FROM tab, а ещё и FROM tab2? Если нужно будет добавить к 1, 10 и 25 ещё 26? Парсить и менять сохранённый запрос? Не, так не пойдёт..
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.08.2015, 16:54
Есть твоя база, в ней таблица, а в ней какие то записи. Это не выборка, а сама генеральная совокупность. Любая её часть - выборка. Не зависимо от того, как она получена, хоть запросом, хоть вручную. А вот числа - это уже не выборка, так как не из них состоит совокупность, из которой отбираешь. Но раз с новыми, то иди по строкам, проверяй галочку и как только где то стоит, так сразу кладёшь Id нужной строки в переменную IdValue и
Delphi
1
if Flag then s:='SELECT * From `'+TabName+'` WHRE (' else s:=s+'OR(Id='+IntToStr(IdValue)+')'
, а по завершении цикла
Delphi
1
s:=s+');';
. В TabName надо положить имя таблицы. Готовый запрос надо положить в поле записи второй таблицы, а при использовании прочитать оттуда и скормить компоненту TSQLQuery.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 17:03  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
иди по строкам, проверяй галочку
Спасибо, кэп))
Если серьёзно, я скорее всего сделаю, как krapotkin написал, потому что лучших вариантов нет, а поля типа set или array в sql - ох и ах - не предусмотрено.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.08.2015, 17:20
Там есть блоб. Но эти извращения и не нужны, так как тебе так и так надо сгенерить запрос, а он текстовый.

Добавлено через 5 минут
Цитата Сообщение от Postscripter Посмотреть сообщение
После чего массив (1,10,25) сохраняется в ini-файл. В следующий раз достаточно загрузить этот ini-файл, чтобы программа достала из базы 1-й, 10-й и 25-й объекты. Понятно, что файлы - не true, поэтому хочется перенести всё в БД.
Зачем парсить? Скармливаешь TSQLQuery, идёшь в его результате по всем строкам, читаешь поле Id, для каждого выставляешь галочки там, где ты их их вообще расставляешь, потом добавляешь новые, возможно снимаешь часть галочек, потом заново формируешь запрос.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 17:28  [ТС]
Слишком хитромудро. Делать из цифер запрос, выполнять его, вычитывать и получать снова цифры. Если бы я увидел такое в чужой программе... В общем, выражение "умыть глаза святой водой" как раз сюда))
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.08.2015, 17:41
Ну а что здесь ещё можно придумать? Есть запрос, в него надо толи вручную добавить часть условий, а часть удалить, толи только часть добавить, то ли только часть удалить. Для этого надо увидеть таблицу с уже расставленными как раньше галочками и, отталкиваясь от них, внести изменения. Для этого придётся парсить запрос, но для получения не индетификаторов, а самих записей, значит парсить должна БД. А потом надо автоматически восстановить галочки. Это не святая вода, это требование. И его придётся выполнить.
0
9 / 9 / 1
Регистрация: 04.07.2012
Сообщений: 218
11.08.2015, 17:51  [ТС]
taras atavin, спасибо)) Вашей настойчивости и энергии можно позавидовать))
Но я воспользуюсь решением из начала топика, там не придётся ничего парсить.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.08.2015, 17:54
1. Это только кажется.
2. А самому тебе и так не придётся ничего парсить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2015, 17:54
Помогаю со студенческими работами здесь

Как лучше хранить картинку в базе ?
Как лучше хранить картинку в базе ? Через тип данных imame или просто хранить путь к картинке?

Как лучше хранить(шифровать) секьюрные данные в базе?
сабдж собственно. Если md5(), то как обратно разворачивать юзеру, в случае забывчивости или утери инфы....

Как лучше хранить массив?
Подскажите пожалуста, в чем лучше всего хранить огромный массив точек (там их миллионы). Заранее Спасибо

Как лучше хранить массив?
Есть 3 многомерных массива. два из них тип int один strig в каждом около 1000 записей они не будут меняться. Подскажите кто как их хранит...

Как лучше всего хранить двумерный массив переменного размера
Здравствуйте! Мне нужно хранить квадратный массив, размер которого может увеличиваться, но он всегда остается квадратным (храню матрицу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru