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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: разноуровневый каталог продукции

Сообщения:  [1-10]   [11-17] 

 
 автор: 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 подружить?

   
 
 автор: 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   (16.10.2006 в 14:31)   письмо автору
 
   для: cheops   (16.10.2006 в 13:40)
 

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

   
 
 автор: 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.

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

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

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

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

| Id | TovarID | RazdelID |

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

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

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

   
 
 автор: 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   (15.10.2006 в 21:45)   письмо автору
 
   для: cheops   (14.10.2006 в 13:15)
 

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

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

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

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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