shkarbatov
Новичок
Добрый вечер.
Подскажите пожалуйста, есть БД интернет магазина (пока только проектируется).
-- Структура БД
-- Тестовые данные таблицы `categories`
Мне необходимо выбрать все родительские категории заданной категории (допустим 6).
То есть в итоге должны выбраться категории с id = (1, 2, 7)/
Есть вот такой вот запрос:
По идее все хорошо, вот только проблема в том, что подзапрос возвращает ('1, 2, 7'), а не (1, 2, 7) и выбирается соответственно только 1 директория.
Вопрос: Подскажите пожалуйста как лучше решить эту ситуацию. Если есть действенные советы по перепроектированию БД, то можно их рассмотреть. Однако желательно решить текущую задачу с исходными данными.
Всем спасибо!
Подскажите пожалуйста, есть БД интернет магазина (пока только проектируется).
-- Структура БД
PHP:
CREATE TABLE IF NOT EXISTS `categories` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(255) NOT NULL COMMENT 'Имя',
`parent_id` mediumint(8) NOT NULL COMMENT 'ID родительской категории',
`mpath` varchar(128) NOT NULL COMMENT 'Материальный путь',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PHP:
INSERT INTO `categories` (`id`, `name`, `parent_id`, `mpath`) VALUES
(1, 'Category 1', 0, ''),
(2, 'Category 2', 1, '1'),
(3, 'Category 2', 1, '1'),
(4, 'Category 1', 0, ''),
(5, 'Category 3', 3, '1,3'),
(6, 'Category 4', 7, '1,2,7'),
(7, 'Category 3', 2, '1,2');
То есть в итоге должны выбраться категории с id = (1, 2, 7)/
Есть вот такой вот запрос:
PHP:
SELECT id
FROM categories
WHERE id IN (
SELECT mpath
FROM categories
WHERE id = 6
)
Вопрос: Подскажите пожалуйста как лучше решить эту ситуацию. Если есть действенные советы по перепроектированию БД, то можно их рассмотреть. Однако желательно решить текущую задачу с исходными данными.
Всем спасибо!