Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: разноуровневый каталог продукции
 
 автор: zelen   (13.10.2006 в 10:03)   письмо автору
 
 

подскажите идею создания разноуровнего каталога!!!

   
 
 автор: cheops   (13.10.2006 в 12:43)   письмо автору
 
   для: zelen   (13.10.2006 в 10:03)
 

Под разноуровнемым каталогом понимается каталог, в котором подкаталоги могут находится на разной глубине вложения?

   
 
 автор: Anatoly_ua   (13.10.2006 в 20:52)   письмо автору
 
   для: cheops   (13.10.2006 в 12:43)
 

Хотел задать вопрос отдельно, а тут увидел эту тему. У меня похожий вопрос, только есть еще желание сделать так, чтобы каждый товар мог быть в нескольких (неограничено) рубриках одновременно.

Дерево каталога хочу делать в отдельной таблице. Как лучше увязать таблицу этого дерева и таблицу товаров?

   
 
 автор: cheops   (13.10.2006 в 21:10)   письмо автору
 
   для: Anatoly_ua   (13.10.2006 в 20:52)
 

Для этого обычно создают третью таблицу в которая связывает товарную позицию и каталоги в которых она может присутствовать.

   
 
 автор: Anatoly_ua   (13.10.2006 в 23:05)   письмо автору
 
   для: cheops   (13.10.2006 в 21:10)
 

Спасибо! :) Идея вроде бы ясна.
А как к этой третьей таблице составить запрос, чтобы отобрать товары, которые в нескольких (произвольное количество) категориях одновременно находятся? Это сложно будет?

   
 
 автор: nikk   (14.10.2006 в 00:01)   письмо автору
 
   для: 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 товаров и соответствующих разделов каталога

   
 
 автор: Anatoly_ua   (14.10.2006 в 01:15)   письмо автору
 
   для: nikk   (14.10.2006 в 00:01)
 

Такой запрос выдает товары, которые находятся хотя бы в одном из разделов из списка, а нужно, чтобы в результате были товары, которые есть одновременно во всех выбранных разделах. Возможно такое?

   
 
 автор: cheops   (14.10.2006 в 13:15)   письмо автору
 
   для: Anatoly_ua   (14.10.2006 в 01:15)
 

Тогда можно добавить сравнения по количеству разделов...

   
 
 автор: Anatoly_ua   (15.10.2006 в 21:45)   письмо автору
 
   для: cheops   (14.10.2006 в 13:15)
 

Я это понимаю, но в MySQL можно сказать совсем не разбираюсь -- только на простые запросы хватает. Если можно, подскажите, пожалуйста, как такой запрос в MySQL можно сделать?

   
 
 автор: cheops   (16.10.2006 в 00:03)   письмо автору
 
   для: 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 номера разделов.

   
 
 автор: Anatoly_ua   (16.10.2006 в 12:49)   письмо автору
 
   для: cheops   (16.10.2006 в 00:03)
 

Но, боюсь, что такой запрос работать не будет. Или я что-то не так понял? Это запрос к третьей таблице, которая увязывает Разделы и Товары? Как я понял, ее структура такая:

| Id | TovarID | RazdelID |

Id - не уверен, что нужен, но на всякий случай...
Причем в одной строке и в TovarID, и в RazdelID хранится только одно значение, т.е. если товар входит в несколько разделов, то тогда в этой третьей таблице будет несколько строк для этого товара (будут строки с одинаковыми TovarID, но разными RazdelID.
Тогда такой запрос работать не будет. Или я где-то не так понял что-то?

   
 
 автор: cheops   (16.10.2006 в 13:40)   письмо автору
 
   для: Anatoly_ua   (16.10.2006 в 12:49)
 

А у вас какая структура базы данных?

   
 
 автор: Anatoly_ua   (16.10.2006 в 14:31)   письмо автору
 
   для: cheops   (16.10.2006 в 13:40)
 

Да можно сказать, что пока что никакой. На данный момент у меня единственная таблица товаров, где просто есть поля, отвечающие за принадлежность товара к различным разделам (для каждого раздела -- свое поле boolean, типа)
Просто эти разделы теперь очень уж раздулись и плюс появилась там сложная иерархия, я и подумал, что проще будет сделать отдельно дерево разделов, чтоб уже добавлять их сколько угодно с любой вложенностью и т.п.
Была идея просто в товары добавить поле Razdel и в него заносить Id разделов через разделители какие-то, а потом выбирать их чем-то наподобие Like %RazdelId1%RazdelId2%RazdelId3%, но как-то это криво все. С третьей таблицей интересней немного, но еще не знаю, как эти все запросы составлять. Я так понимаю, тут еще нужно будет связи для таблиц задавать в MySQL...

   
 
 автор: Anatoly_ua   (16.10.2006 в 18:05)   письмо автору
 
   для: 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   (17.10.2006 в 00:42)   письмо автору
 
   для: 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 подружить?

   
 
 автор: zelen   (16.10.2006 в 10:34)   письмо автору
 
   для: cheops   (13.10.2006 в 12:43)
 

Я вернулся! Хотелось бы по подробней о разноуровневом каталоге!
Разноуровневый - это именно то, что вы написали, cheops!!!

   
 
 автор: cheops   (16.10.2006 в 13:41)   письмо автору
 
   для: zelen   (16.10.2006 в 10:34)
 

Возможно вам будет интересна тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=701.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования