[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как лучше сделать реализацию
Страницы: 1, 2, 3, 4
Astin
Всем привет. Встал вопрос реализации данных номенклатуры

Вот к примеру есть категории Электроэнергия, Масла смазочные

Далее есть отдельно ГОСТы, по ним вписываются данные, описание и так далее

И вот, забивая данные по номенклатуре нужно указать ГОСТ или ГОСТы, то есть он может быть один или несколько.
Вопрос такой как лучше хранить в бд? Категории это отдельная таблица, ГОСТы думаю так же сделать отдельную таблицу, ну и когда данные выбераешь, выбераешь категорию и ГОСТЫ. Мне нужно будет выводить эти данные, и в таблице где у одной позиции будут госты нужно выводить на них ссылки, то есть если человек не знает гост он может посмотреть его описание.
Как мне сделать хранение нескольких гостов у одной позиции?
Единственное что приходит в голову - это хранить в виде сериализованого массива, в виде название => id ГОСТа ну или наоборот. Поскольку думаю что при выводе так будет проще сделать ссылку на ГОСТ. Еще момент что так не пойдет поскольку мне нужен поиск по гостам тих позиций.
Как лучше их хранить, чтобы и поиск был и можно было вывести эти госты к позиции с ссылками?
Astin
При хранении в виде массива поиск я так понимаю не получится, а вот при хранении в виде
ГОСТ 1, ГОСТ 2, ГОСТ 3 поиск выйдет, но вот теперь встает вопрос как их вывести так чтоб ссылки на них были?
При запросе на вывод делать по гостам explode, далее цикл и в него запихивать запрос на вывод гост и его id?
Но вот в цикл запрос как то не корректно. Как быть?
Valick
Astin, тут не надо ничего выдумывать. Про отношение "один-ко-многим" только ленивый в интернетах не написал.


_____________
Стимулятор ~yoomoney - 41001303250491
Astin
Я имел в виду не про отношение один ко многим, я имел в виду как лучше для поиска и для вывода хранить несколько гостов у одной позиции
Astin
Мне просто нужно вывести позицию с гостами, а мне нужно вывести еще и ссылки на ти госты
Если госты будут хранится в виде ГОСТ 1, ГОСТ 2, ГОСТ 3 у одной позиции
то мне придется делать еще запрос в таблицу причем тот запрос думаю придется пихать в цикл что не хочется
Astin
Ну думаю можно хранить в двух вариантах
первый для поиска ГОСТ 1, ГОСТ 2, ГОСТ 3
второй в виде массива сериализованого

При выводе мне придется делать всего один запрос и из сериализованого массива уже
брать название госта и его id на ссылку
Astin
Проблема в том что у позиции может быть не один гост, а несколько
ЛьiжHиk
Руководство по проектированию реляционных баз данных (Создание связи многие-ко-многим)

Если коротко, то создаётся три таблицы: Категории, Госты, Составная. В составной таблице хранится например: id Категории, id Госта. Соответственно для каждого следующего Госта даже в аналогичной Категории создаётся новая запись.
Astin
Да это все понятно что у категорий и гостов свои таблицы
Но есть еще таблица с позициями сертификатов и у них может быть как один гост так и несколько
Мне нужно выводить список этих сертификатов с ссылками на госты, плюс делать поиск сертификатов по гостам, если делать поиск по гостам то думаю хранить в виде ГОСТ 1, ГОСТ 2, ГОСТ 3
Но если хранить только в таком виде то мне придетьтся при выводе списка сертификатов
лезть еще в таблицу гостов чтобы получить id госта для ссылки
А вот если при создании сертификата я буду записывать в таблицу сертификатов не только госты в виде строки, а и еще в виде массива то мне не придется лезть в таблицу гостов чтобы получить id на ссылку
Valick
Цитата (Astin @ 24.09.2019 - 16:43)
Но если хранить только в таком виде то мне придетьтся при выводе списка сертификатов
лезть еще в таблицу гостов чтобы получить id госта для ссылки


это всего лишь один запрос, в чём проблема? Выбрать гост и приджойнить сертификат или наоборот, выбрать сертификат и приджойнить все госты, этож как два пальца об асфальт.

_____________
Стимулятор ~yoomoney - 41001303250491
ЛьiжHиk
Не надо записывать в виде массива, создаёте третюю таблицу, в которой записываются отношения Категория - Гост

Категория:
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 ...

Похоже вы не умеете скажем так - соединять между собой таблицы?
Astin
Да у меня категория к сертификатам, а не гостам

Valick вот про что, причем здесь приджоинить, вот у сертификата имеется несколько гостов, к примеру храним вот так ГОСТ 1, ГОСТ 2, ГОСТ 3

Я делаю запрос к таблице сертификатов для их вывода, далее получаю вот такой вид
id сертификата
название
описание
и его госты в виде ГОСТ 1, ГОСТ 2, ГОСТ 3

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

Я просто в цикл не хочу пихать запрос
ЛьiжHиk
Изначально говорили про Категории и Госты, теперь ещё сертификаты нарисовались tongue.gif

Обычно в цикле собирается весь запрос, после чего выполняется Один раз
Astin
Про категории гостов можно пока забыть
К примеру

ГОСТЫ 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) {

// в $row['gost'] я получаю id госта и мне нужно вывести его название
// че в цикле запрос пихать на вывод названия госта


}



Astin
Цитата
Изначально говорили про Категории и Госты, теперь ещё сертификаты нарисовались tongue.gif

Обычно в цикле собирается весь запрос, после чего выполняется Один раз

Я же писал что есть позиции, их назовем сертификаты, у них есть госты, то есть у сертификата может быть как один гост так несколько
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.