Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Каталог товаров, Погасить пустые разделы 
:(
    Опции темы
Error202
  Дата 28.4.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 5.11.2004
Где: Moscow

Репутация: нет
Всего: нет



Есть таблица разделов: cat_id, parent_id, name, hide (=0)
Есть таблица товаров: item_id, name, cat_id, available (=1)

Задача: 
1. Нужно погасить (установить hide = 0) все конечные разделы, где нет товаров или товары с available=0
2. Погасить (установить hide = 0) все разделы, где все дочерние разделы имеют hide = 0

С какого бока подойти к решению задачи... Уже всю голову сломал...
PM MAIL WWW   Вверх
solenko
Дата 28.4.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 4
Всего: 67



Цитата(Error202 @  28.4.2011,  12:14 Найти цитируемый пост)
1. Нужно погасить (установить hide = 0) все конечные разделы, где нет товаров или товары с available=0

это просто
Код

UPDATE categories LEFT JOIN items ON categories.cat_id = items.cat_id AND items.available = 1 SET categories.hide = 0 WHERE items.cat_id IS NULL


А вот с 
Цитата(Error202 @  28.4.2011,  12:14 Найти цитируемый пост)
2. Погасить (установить hide = 0) все разделы, где все дочерние разделы имеют hide = 0

если уровень вложенности неограничен, то нужно писать рекурсивную функцию.



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Error202
Дата 28.4.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 5.11.2004
Где: Moscow

Репутация: нет
Всего: нет



Hide надо ставить только у конечных разделов, которые не являются чьими-то parent_id...
Но спасибо! Направление понял

Это сообщение отредактировал(а) Error202 - 28.4.2011, 14:11
PM MAIL WWW   Вверх
exe1389
Дата 12.5.2011, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 7.4.2011

Репутация: нет
Всего: нет



не буду создавать новую тему дополню эту, потому что вопрос похожий... 

есть "бд" в которой примерно 26 000 товаров, какую команду нужно вписать в запрос : 
Код

" 
SELECT m_tov.id, m_tov.nab_id, m_fab.id, m_nabors.id, m_prod_types.id, m_nabors.type_id, m_tov.name, m_nabors.name, m_fab.name, m_tov.price, m_tov.picture, m_tov.schema_pic, m_nabors.picture, m_fab.logo, m_nabors.schema_pic, m_tov.width, m_tov.height, m_tov.depth, m_tov.article, m_prod_types.name, m_prod_types.alias 
FROM m_tov, m_nabors, m_fab, m_prod_types 
WHERE m_tov.nab_id = m_nabors.id 
AND m_nabors.fab_id = m_fab.id 
AND m_nabors.type_id = m_prod_types.id 
" 

чтобы исключить из таблицы все товары где m_tov.price равно нулю

PM MAIL   Вверх
skyboy
Дата 13.5.2011, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(solenko @  28.4.2011,  12:30 Найти цитируемый пост)
если уровень вложенности неограничен

если это сервисная операция(в смысле, скорость выполнения не критична), и формат хранения иерархии предполагает простой выбор родителей для указанного узла, можно просто выпоолнять запрос "установить для родителя hide = 0, если у него hide <> 0 и нет дочерних с hide <> 0" до тех пор, пока affected_rows будет возвращать ненулевое значение.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.