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

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

11.08.2015, 09:15. Показов 1448. Ответов 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
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 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
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru