Задавайте вопросы, мы ответим
Вы не зашли.
Такая проблема:
Таблицы:
CREATE TABLE products (
products_id int NOT NULL auto_increment,
...
products_image varchar(64),
products_price decimal(15,4) NOT NULL,
PRIMARY KEY (products_id),
KEY idx_products_date_added (products_date_added)
);
CREATE TABLE products_description (
products_id int NOT NULL auto_increment,
language_id int NOT NULL default '1',
products_name varchar(64) NOT NULL default '',
...
PRIMARY KEY (products_id,language_id),
KEY products_name (products_name)
);
CREATE TABLE products_to_categories (
products_id int NOT NULL,
categories_id int NOT NULL,
PRIMARY KEY (products_id,categories_id)
);
CREATE TABLE categories (
categories_id int NOT NULL auto_increment,
parent_id int DEFAULT '0' NOT NULL,
...
PRIMARY KEY (categories_id),
KEY idx_categories_parent_id (parent_id)
);
CREATE TABLE categories_description (
categories_id int DEFAULT '0' NOT NULL,
language_id int DEFAULT '1' NOT NULL,
categories_name varchar(32) NOT NULL,
...
PRIMARY KEY (categories_id, language_id),
KEY idx_categories_name (categories_name)
);
Необходимо сделать выборку из этих таблиц для каждого продукта. С этим проблем нету:
Неактивен
1. Слово «живопись» пишется через «и»
2. Одним запросом не отделаетесь, прийдется писать хранимую процедуру или серию
запросов по получению родителей.
Как вариант — сделать денормализованную табличку «все родители», тогда можно будет
объединить с ней, и обойтись одним запросом. В этом случае дополнительные запросы
просто переезжают на этап поддержания этой таблички.
Пусть, например, есть категории
живопись = 1
пейзаж = 2 (родитель = 1)
пейзаж с домиком = 3 (родитель = 2)
Тогда табличка «все родители» должна быть вида
id | parent
------------
2 | 1
3 | 2
3 | 1
Неактивен
paulus написал:
1. Слово «живопись» пишется через «и»
2. Одним запросом не отделаетесь, прийдется писать хранимую процедуру или серию
запросов по получению родителей.
Как вариант — сделать денормализованную табличку «все родители», тогда можно будет
объединить с ней, и обойтись одним запросом. В этом случае дополнительные запросы
просто переезжают на этап поддержания этой таблички.
Пусть, например, есть категории
живопись = 1
пейзаж = 2 (родитель = 1)
пейзаж с домиком = 3 (родитель = 2)
Тогда табличка «все родители» должна быть вида
id | parent
------------
2 | 1
3 | 2
3 | 1
Так оно и есть в таблице categories:
categories_id | parent_id
------------
1 | 0
2 | 1
3 | 2
Только в таком виде...
Неактивен
Нет, оно не в таком виде, как надо. Надо именно «все родители» (включая бабушек, прабабушек и т.д.)
Или несколько запросов (рекурсивно).
Неактивен
Ну оно такое какое есть, там всего 2 уровня (parent_id=0 – это первый уроверь (родитель), parent_id=1... – это второй уровень) вот кусок дампа:
Неактивен
Тогда самое простое — написать кусок на том же PHP, раз уж Вы его используете:
Неактивен