|
|
|
| подскажите идею создания разноуровнего каталога!!! | |
|
|
|
|
|
|
|
для: zelen
(13.10.2006 в 10:03)
| | Под разноуровнемым каталогом понимается каталог, в котором подкаталоги могут находится на разной глубине вложения? | |
|
|
|
|
|
|
|
для: cheops
(13.10.2006 в 12:43)
| | Хотел задать вопрос отдельно, а тут увидел эту тему. У меня похожий вопрос, только есть еще желание сделать так, чтобы каждый товар мог быть в нескольких (неограничено) рубриках одновременно.
Дерево каталога хочу делать в отдельной таблице. Как лучше увязать таблицу этого дерева и таблицу товаров? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(13.10.2006 в 20:52)
| | Для этого обычно создают третью таблицу в которая связывает товарную позицию и каталоги в которых она может присутствовать. | |
|
|
|
|
|
|
|
для: cheops
(13.10.2006 в 21:10)
| | Спасибо! :) Идея вроде бы ясна.
А как к этой третьей таблице составить запрос, чтобы отобрать товары, которые в нескольких (произвольное количество) категориях одновременно находятся? Это сложно будет? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(13.10.2006 в 23:05)
| |
SELECT
--bla lba bla ---
where
--bla lba bla ---
and
Tovar_has_Razdel.RazdelID in (список нужных вам номеров раздела через запятую)
|
где таблица Tovar_has_Razdel связывает ID товаров и соответствующих разделов каталога | |
|
|
|
|
|
|
|
для: nikk
(14.10.2006 в 00:01)
| | Такой запрос выдает товары, которые находятся хотя бы в одном из разделов из списка, а нужно, чтобы в результате были товары, которые есть одновременно во всех выбранных разделах. Возможно такое? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(14.10.2006 в 01:15)
| | Тогда можно добавить сравнения по количеству разделов... | |
|
|
|
|
|
|
|
для: cheops
(14.10.2006 в 13:15)
| | Я это понимаю, но в MySQL можно сказать совсем не разбираюсь -- только на простые запросы хватает. Если можно, подскажите, пожалуйста, как такой запрос в MySQL можно сделать? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(15.10.2006 в 21:45)
| | Запрос может выглядеть следующим образом
SELECT
...
where
...
and
Tovar_has_Razdel.RazdelID = 7 AND
Tovar_has_Razdel.RazdelID = 4 AND
Tovar_has_Razdel.RazdelID = 16 AND
Tovar_has_Razdel.RazdelID = 9
|
Где 4, 7, 16 и 9 номера разделов. | |
|
|
|
|
|
|
|
для: cheops
(16.10.2006 в 00:03)
| | Но, боюсь, что такой запрос работать не будет. Или я что-то не так понял? Это запрос к третьей таблице, которая увязывает Разделы и Товары? Как я понял, ее структура такая:
| Id | TovarID | RazdelID |
Id - не уверен, что нужен, но на всякий случай...
Причем в одной строке и в TovarID, и в RazdelID хранится только одно значение, т.е. если товар входит в несколько разделов, то тогда в этой третьей таблице будет несколько строк для этого товара (будут строки с одинаковыми TovarID, но разными RazdelID.
Тогда такой запрос работать не будет. Или я где-то не так понял что-то? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(16.10.2006 в 12:49)
| | А у вас какая структура базы данных? | |
|
|
|
|
|
|
|
для: cheops
(16.10.2006 в 13:40)
| | Да можно сказать, что пока что никакой. На данный момент у меня единственная таблица товаров, где просто есть поля, отвечающие за принадлежность товара к различным разделам (для каждого раздела -- свое поле boolean, типа)
Просто эти разделы теперь очень уж раздулись и плюс появилась там сложная иерархия, я и подумал, что проще будет сделать отдельно дерево разделов, чтоб уже добавлять их сколько угодно с любой вложенностью и т.п.
Была идея просто в товары добавить поле Razdel и в него заносить Id разделов через разделители какие-то, а потом выбирать их чем-то наподобие Like %RazdelId1%RazdelId2%RazdelId3%, но как-то это криво все. С третьей таблицей интересней немного, но еще не знаю, как эти все запросы составлять. Я так понимаю, тут еще нужно будет связи для таблиц задавать в MySQL... | |
|
|
|
|
|
|
|
для: cheops
(16.10.2006 в 13:40)
| | Структура такая планируется:
Razdel - id, ...
Tovar - id, ...
Structura - TovarID, RazdelID
Запрос вот такой пока сочинил
SELECT *, COUNT(*) AS v_skolkih_razdelah
FROM Tovar
INNER JOIN Structura ON Tovar.id=Structura.TovarID
WHERE Structura.RazdelID IN (1,2)
GROUP BY id
|
Но он выдает все товары, которые входят ИЛИ в 1 ИЛИ в 2.
В столбце v_skolkih_razdelah выводится во сколько разделов входит этот товар. Вот как бы теперь получить только те товары, у которых этот v_skolkih_razdelah равен 2 (для данного примера)?
Можно как-то проще это сделать? | |
|
|
|
|
|
|
|
для: Anatoly_ua
(16.10.2006 в 18:05)
| | Короче, разобрался :)
SELECT SQL_CALC_FOUND_ROWS *, COUNT(*) AS v_skolkih_razdelah
FROM Tovar
INNER JOIN Structura ON Tovar.id=Structura.TovarID
WHERE Structura.RazdelID IN (1,2)
GROUP BY id
HAVING find_in_set(2, v_skolkih_razdelah)
LIMIT 0,10;
SELECT FOUND_ROWS();
|
Никто не в курсе, как эти SQL_CALC_FOUND_ROWS и FOUND_ROWS() с PEAR::MDB2 подружить? | |
|
|
|
|
|
|
|
для: cheops
(13.10.2006 в 12:43)
| | Я вернулся! Хотелось бы по подробней о разноуровневом каталоге!
Разноуровневый - это именно то, что вы написали, cheops!!! | |
|
|
|
|