Трехтабличный SQL-запрос: извлечение товара и соответстующих ему тэгов
Пример: если хотим вынуть один товар с этих таблиц нужно взять с таблицы tag_post c 1 до 8 например для id_post поста 5 вынуть все айдишники id_tag и с таблицы tag вынуть по этим айдишника теги то получиться один товар типа 1) артикул 2) Вид изделия 3)Материал 4) Основная вставка 5) Производитель нам важно только айдишники до 5
Делаю фильтр на php. И очень затрудняюсь с составлением SQL запроса( Аналогичный вопрос в котором хотел вынуть товары с БД. Потом решил добавить в БД нумерацию с 1 до сколько то там повторяющихся цифр чтобы запрос был простым.
Как сделать свойства товаров в БД?
Задача следующая — делаю интернет магазин, в котором у товаров есть несколько атрибутов. Соответственно комбинация этих атрибутов будет иметь разную цену.. С этим у меня возникли большие сложности.
1) Как построить архитектуру в БД, чтобы свойства были динамические и их можно было бы добавлять к группам товара.
2) Окей, я изучил архитектуру eav и приблизительно понял, как буду их хранить, но как быть с выборкой немного непонятно.. То есть по идее у меня будут товары, к ним будут привязаны предложения, имеющие цену, к которым будут привязаны значения атрибутов товара.. То есть получается чтобы получить цену товара с конкретными характеристиками мне придётся сначала выбрать все предложения, связанные с айдишниками таких то значений?
3) Когда пользователь выбирает свойства, он должен видеть цену предложения, соответствующего выбранным атрибутам. Но если постоянно запрашивать её у сервера апдейт цены будет достаточно долгим.. Как лучше решить этот вопрос?
- Вопрос задан более трёх лет назад
- 595 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 4
EAV — гуано по производительности
Его можно использовать для первичного хранения данных, перед тем как ты переваришь и выкинешь уже готовые для работы данные в Solr или Sphinx, например.
Но непосредственно для выборки данных EAV использовать нежелательно по соображениям производительности.
Если вам всенепременно хочется это сделать с реляционной СУБД, то вам поможет денормализация (данные будут дублироваться, но это не страшно, зато работать будет шустро).
А если вам хочется сделать это правильно и чтобы работало максимально быстрым образом, то я бы предложил рассмотреть более подходящие для данной задачи системы: Tarantool, Sphinx,
Solr.
Ответ написан более трёх лет назад
Нравится 2 3 комментария
darksladen @darksladen Автор вопроса
А какие данные можно дублировать для оптимизации? Я хотел как раз связывать значения атрибутов и с товаров и с ценами..
darksladen: Денормализация в самой жесткой форме — это вообще одна таблица
Товар1, размер 46, цена 1000 рублей
Товар1, размер 48, цена 1200 рублей
Товар2, размер 48, цена 1200 рублей
ThunderCat @ThunderCat
darksladen: в целом — чем более «плоская» таблица, тем быстрее работают индексы и выборки.
разработка программного обеспечения
Если вы используете БД PostgreSQL, то можете хранить аттрибуты, к примеру, в JSON-поле таблицы. Они индексируются и не придется делать кучу JOIN, как с EAV, чтобы вытащить данные.
Но тут есть очевидные минусы, это удаление атрибута, к примеру. Может быть достаточно тяжелым. Но все зависит от способа реализации.
В целом, можно взять EAV и достраивать JOIN-ами к запросу атрибуты, а можно и JSON.
Забыл сказать, JSON поддерживает индексы и запросы по полям.
Ответ написан более трёх лет назад
Нравится 1 3 комментария
ThunderCat @ThunderCat
Если вы используете БД PostgreSQL, то можете хранить аттрибуты, к примеру, в JSON-поле таблицы
во первых мускуль тоже умеет, во вторых это нехило нарушает нормальность таблиц, в третьих — кто-то видел тест по производительности выборки из жсон полей в постгри/мускуль? Хотелось бы глянуть как они работают, есть подозрение что не очень быстро. Буду благодарен за ссылочки.
С 5.7 вроде, и индексы вычисляемые там тоже есть, да.
Если мы говорим про быстроту, нормализация нарушается в большинстве случаев. Либо у вас таблица нормализована, и, что очень часто, медленна, либо — у вас есть денормализованные данные и работает достаточно быстро. Ссылок не дам, можно погуглить.
Можно так же посмотреть видео Олега Бартунова, в том числе https://www.youtube.com/watch?v=SNzOZKvFZ68
Хочу отметить так же, у себя я применял EAV схему расширения. Это было в 2013-2014 годах. А вот сейчас я бы попробовал именно JSON-поле.
Экспорт объектов базы данных в другие базы данных Access
В Access существует несколько способов скопировать объект, например таблицу или форму, из одной базы данных в другой. Проще всего скопировать и вставить объект, но экспорт объекта дает вам дополнительные возможности. Например, вы можете экспортировать определение таблицы и ее данные или же только определение таблицы (пустую копию таблицы). Вы также можете сохранить сведения об операции в виде спецификации экспорта для дальнейшего использования.
Обзор
Вы можете экспортировать таблицу, запрос, форму, отчет, макрос или модуль из одной базы данных Access в другую. При экспорте объекта Access создает его копию в конечной базе данных.
Экспорт объектов базы данных используется в том случае, если нужно:
- скопировать структуру таблицы в другую базу данных как ярлык для создания новой таблицы;
- скопировать оформление и макет формы или отчета в другую базу данных, чтобы быстро создать новую форму или отчет;
- регулярно копировать последнюю версию таблицы или формы в другую базу данных. Для этого вы можете создать спецификацию экспорта, когда впервые экспортируете объект, а затем повторять операцию с помощью нее.
Обратите внимание на то, что экспорт объекта в другую базу данных мало отличается от открытии второй базы данных и импорта в нее объекта из первой. Ниже приведены два основных различия между импортом и экспортом объектов в базах данных Access.
- Вы можете импортировать несколько объектов за одну операцию, но не экспортировать их. Если вы хотите экспортировать несколько объектов в другую базу данных, проще открыть конечную базу данных и выполнить импорт в нее.
- Кроме объектов базы данных, можно импортировать связи между таблицами, любые спецификации импорта и экспорта, а также строки меню и панели инструментов. Вы также можете импортировать запрос в виде таблицы. Экспорт не предлагает таких возможностей.
Ищете сведения об импорте объектов в базу данных Access? См. статью Импорт объектов базы данных в текущую базу данных Access.
Подготовка к экспорту
- Откройте исходную базу данных, если она еще не открыта. У нее может быть формат MDB или ACCDB. Если файл имеет формат MDE или ACCDE, исходным объектом должна быть таблица, запрос или макрос. Формы, отчеты и модули невозможно экспортировать из MDE-или ACCDE-файла.
Примечание: Если база данных доступна только для чтения или у вас нет разрешений на внесение в нее изменений, вы сможете выполнить экспорт, но не сохранить его спецификацию.
Элемент | Описание |
Один объект на операцию | Одновременно можно экспортировать только один объект. Чтобы экспортировать несколько объектов, повторите операцию экспорта для каждого из них или импортируйте их в конечной базе данных. |
Новая таблица | Каждая операция экспорта создает новый объект в конечной базе данных. Если объект с таким именем уже существует, вы можете перезаписать его или же указать другое имя для нового объекта. |
Примечание: С помощью экспорта невозможно добавить записи в существующую таблицу. Чтобы сделать это, рекомендуется создать запрос на добавление. Дополнительные сведения см. в статье Добавление записей в таблицу с помощью запроса на добавление.
- Если не удается открыть базу данных, возможно, она открыта другим пользователем в монопольном режиме. Обычно нужно найти этого пользователя и попросить его закрыть базу данных и снова открыть ее в обычном режиме (для нескольких пользователей).
- Если база данных защищена паролем, при каждом запуске мастера экспорта или сохраненной спецификации вам будет предлагаться ввести пароль.
- Если вы хотите экспортировать объект в новую базу данных, необходимо создать пустую базу данных (которая не содержит таблиц, форм и отчетов) до начала операции.
Экспорт объектов базы данных в другие базы данных Access
- На вкладке Внешние данные в группе Экспорт нажмите кнопку Access.
Совет: Вы также можете запустить экспорт, щелкнув объект правой кнопкой мыши в области навигации и выбрав команды Экспорт > Access.
Дополнительные сведения
- Сведения о том, как сохранить сведения об экспорте в виде спецификации, которую можно использовать повторно, см. в статье Сохранение параметров операции импорта или экспорта в виде спецификации.
- Дополнительные сведения о запуске спецификаций см. в статье Выполнение сохраненной операции импорта или экспорта.
- Дополнительные сведения о запуске спецификаций в определенное время см. в статье Планирование импорта или экспорта.
- Сведения о том, как изменить имя спецификации, удалить ее или обновить имена исходных файлов, см. в статье Задачи управления данными.
Как вынуть описание товара из базы данных
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |