@Chesterfield25

Как составить логику бд и запроса?

Есть несколько таблиц:
страна
CREATE TABLE IF NOT EXISTS `country` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(256) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


продукт
CREATE TABLE IF NOT EXISTS `products` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(256) NOT NULL,
    `description` varchar(256) NOT NULL,
    `url` varchar(256) NOT NULL,
    `price` double NOT NULL,
    `created` datetime NOT NULL,
    `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


продукт, страна
CREATE TABLE IF NOT EXISTS `product_country` (
    `product_id` int(11) NOT NULL,
    `country_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;


раздел
CREATE TABLE IF NOT EXISTS `sections` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(256) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


категория
CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(256) NOT NULL,
    `section_id` int(11) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


подкатегория
CREATE TABLE IF NOT EXISTS `subcategory` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(256) NOT NULL,
    `category_id` int(11) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT


Таблица с id продуктов и стран создана для выборки товаров, которые продаются во всех странах или в конкретной стране. Как составить базу данных таким образом что бы: когда пользователь выбирает одну из стран, ему показать только те разделы, категории и подкатегории в которых есть товары которые продаются в данной стране, а те разделы, категории и подкатегории в которых пусто и в них нет товаров относящихся к данной стране не выводить?
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Надо хотя бы что-то делать самому.
Обычный inner join выберет только те продукты, который относятся к выбранной стране, и только те подкатегории, которые относятся к этим продуктам (при условии, что подкатегории как-то связаны с продукатми). Ничего "сложного" или каких-то хитрых запросов здесь не нужно.
Вывести родительские категории чуть сложнее, но тоже надо сначала самому попытаться, а не просить чтобы написали целиком запрос.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы