Всем привет. Встал вопрос реализации данных номенклатуры
Вот к примеру есть категории Электроэнергия, Масла смазочные
Далее есть отдельно ГОСТы, по ним вписываются данные, описание и так далее
И вот, забивая данные по номенклатуре нужно указать ГОСТ или ГОСТы, то есть он может быть один или несколько.
Вопрос такой как лучше хранить в бд? Категории это отдельная таблица, ГОСТы думаю так же сделать отдельную таблицу, ну и когда данные выбераешь, выбераешь категорию и ГОСТЫ. Мне нужно будет выводить эти данные, и в таблице где у одной позиции будут госты нужно выводить на них ссылки, то есть если человек не знает гост он может посмотреть его описание.
Как мне сделать хранение нескольких гостов у одной позиции?
Единственное что приходит в голову - это хранить в виде сериализованого массива, в виде название => id ГОСТа ну или наоборот. Поскольку думаю что при выводе так будет проще сделать ссылку на ГОСТ. Еще момент что так не пойдет поскольку мне нужен поиск по гостам тих позиций.
Как лучше их хранить, чтобы и поиск был и можно было вывести эти госты к позиции с ссылками?
При хранении в виде массива поиск я так понимаю не получится, а вот при хранении в виде
ГОСТ 1, ГОСТ 2, ГОСТ 3 поиск выйдет, но вот теперь встает вопрос как их вывести так чтоб ссылки на них были?
При запросе на вывод делать по гостам explode, далее цикл и в него запихивать запрос на вывод гост и его id?
Но вот в цикл запрос как то не корректно. Как быть?
Valick
24.09.2019 - 16:26
Astin, тут не надо ничего выдумывать. Про отношение "один-ко-многим" только ленивый в интернетах не написал.
_____________
Стимулятор ~yoomoney - 41001303250491
Я имел в виду не про отношение один ко многим, я имел в виду как лучше для поиска и для вывода хранить несколько гостов у одной позиции
Мне просто нужно вывести позицию с гостами, а мне нужно вывести еще и ссылки на ти госты
Если госты будут хранится в виде ГОСТ 1, ГОСТ 2, ГОСТ 3 у одной позиции
то мне придется делать еще запрос в таблицу причем тот запрос думаю придется пихать в цикл что не хочется
Ну думаю можно хранить в двух вариантах
первый для поиска ГОСТ 1, ГОСТ 2, ГОСТ 3
второй в виде массива сериализованого
При выводе мне придется делать всего один запрос и из сериализованого массива уже
брать название госта и его id на ссылку
Проблема в том что у позиции может быть не один гост, а несколько
ЛьiжHиk
24.09.2019 - 17:10
Руководство по проектированию реляционных баз данных (Создание связи многие-ко-многим)
Если коротко, то создаётся три таблицы: Категории, Госты, Составная. В составной таблице хранится например: id Категории, id Госта. Соответственно для каждого следующего Госта даже в аналогичной Категории создаётся новая запись.
Да это все понятно что у категорий и гостов свои таблицы
Но есть еще таблица с позициями сертификатов и у них может быть как один гост так и несколько
Мне нужно выводить список этих сертификатов с ссылками на госты, плюс делать поиск сертификатов по гостам, если делать поиск по гостам то думаю хранить в виде ГОСТ 1, ГОСТ 2, ГОСТ 3
Но если хранить только в таком виде то мне придетьтся при выводе списка сертификатов
лезть еще в таблицу гостов чтобы получить id госта для ссылки
А вот если при создании сертификата я буду записывать в таблицу сертификатов не только госты в виде строки, а и еще в виде массива то мне не придется лезть в таблицу гостов чтобы получить id на ссылку
Valick
24.09.2019 - 17:51
Цитата (Astin @ 24.09.2019 - 16:43) |
Но если хранить только в таком виде то мне придетьтся при выводе списка сертификатов лезть еще в таблицу гостов чтобы получить id госта для ссылки |
это всего лишь один запрос, в чём проблема? Выбрать гост и приджойнить сертификат или наоборот, выбрать сертификат и приджойнить все госты, этож как два пальца об асфальт.
_____________
Стимулятор ~yoomoney - 41001303250491
ЛьiжHиk
24.09.2019 - 17:59
Не надо записывать в виде массива, создаёте третюю таблицу, в которой записываются отношения Категория - Гост
Категория:
id | (varchar)
1 | Масла смазочные
2 | Охлаждающие жидкости
Гост:
id | (varchar)
1 | Гост 1
2 | Гост 2
3 | Гост 3
4 | Гост 4
5 | Гост 5
Составная:
id | id Категории (int) | id Госта (int)
1 | 1 | 3
2 | 1 | 4
3 | 2 | 3
4 | 1 | 1
5 | 2 | 4
6 | 7 | 20 ...
Похоже вы не умеете скажем так - соединять между собой таблицы?
Да у меня категория к сертификатам, а не гостам
Valick вот про что, причем здесь приджоинить, вот у сертификата имеется несколько гостов, к примеру храним вот так ГОСТ 1, ГОСТ 2, ГОСТ 3
Я делаю запрос к таблице сертификатов для их вывода, далее получаю вот такой вид
id сертификата
название
описание
и его госты в виде ГОСТ 1, ГОСТ 2, ГОСТ 3
теперь мне на эти госты нужно ссылки. Как я их получу? мне придется explode делать, потом цикл и в нем лезть в таблицу гостов чтобы достать его id
Я просто в цикл не хочу пихать запрос
ЛьiжHиk
24.09.2019 - 18:14
Изначально говорили про Категории и Госты, теперь ещё сертификаты нарисовались
Обычно в цикле собирается весь запрос, после чего выполняется Один раз
Про категории гостов можно пока забыть
К примеру
ГОСТЫ gost
id | name
1 ГОСТ Р 54149-2010
2 ГОСТ 13109-97
3 ГОСТ 13109-97
Сертификаты certificate
id 1
name Сертификат 1
opisanie Описание
gost 1, 2, 3
Теперь делаем запрос на вывод
$stmt = $pdo->query('SELECT * FROM certificate');
foreach ($stmt as $row) {
}
Цитата |
Изначально говорили про Категории и Госты, теперь ещё сертификаты нарисовались tongue.gif
Обычно в цикле собирается весь запрос, после чего выполняется Один раз |
Я же писал что есть позиции, их назовем сертификаты, у них есть госты, то есть у сертификата может быть как один гост так несколько
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.