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

Форум MySQL

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

 

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

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

тема: Универсальный каталог продукции
 
 автор: coerbi   (15.09.2006 в 22:09)   письмо автору
 
 

Прошу прощения если я повторяюсь, но вот в чем вопрос.
Создаю универсальный (многоуровневый) каталог на основе того что приведен в вашей книге только не могу понять:
>ведь записи в таблице товаров принадлежат ТОЛЬКО концевым каталогам то есть самым глубоким => следовательно если у текущего каталога есть подкаталоги то НА НЕГО НЕ ССЫЛАЕТСЯ НИ ОДНА ЗАПИСЬ ИЗ ТАБЛИЦЫ ТОВАРОВ .
>получается что пока я не доберусь до самого вложенного каталога по дереву => НЕ УВИЖУ НИ ОДНОГО ТОВАРА .....???
ПОМОГИТЕ ПОЖАЛУЙСТА РАЗОБРАТЬСЯ !!!

   
 
 автор: cheops   (15.09.2006 в 22:16)   письмо автору
 
   для: coerbi   (15.09.2006 в 22:09)
 

Товары можно помещать и в промежуточные каталоги, можно модифицировать каталог таким образом, чтобы в промежуточных каталогах выводились товарные позиции подчинённых каталогов.

   
 
 автор: coerbi   (15.09.2006 в 22:47)   письмо автору
 
   для: cheops   (15.09.2006 в 22:16)
 

Я тоже об этом думал в смысле модифицировать каталог но вот два вопроса которые не дают мне покоя:
> Каким образом ГРАМОТНО организовать SQL запрос (а может модифицировать базу данных?) что можно было в результирующем наборе выводить записи из всех подчиненных подкаталогов текущего каталога. А главное как их потом можно будет ОТСОРТИРОВАТЬ ???
> Кстати, а как это предполагалось в Вашей книге...?

   
 
 автор: coerbi   (16.09.2006 в 12:24)   письмо автору
 
   для: coerbi   (15.09.2006 в 22:47)
 

Блин, ответьте пожалуйста...Нужен именно многоуровневый бесконечновложенный каталог в возможностью добавлять каталоги на любой уровень. Плииииииз !!!!!!!!!!!!!!!!!!!!!!!!!!!!

   
 
 автор: cheops   (16.09.2006 в 14:01)   письмо автору
 
   для: coerbi   (15.09.2006 в 22:47)
 

Следует поступить следующим образом: рекурсивно спуститься по каталогу и посмотреть, каки подкаталоги имеются у текущего каталога, запомнить их в массив $arr и сформировать из них запрос
SELECT * FROM product 
            WHERE id_catalog IN (4, 5, 8, 12)

где 4, 5, 8, 12 - первичные ключи текущего каталога и его подчиннёных каталогов. Т.е. в файле product.php запрос
<?php
  
// Выбираем из таблицы product
  
$query "SELECT * FROM product 
            WHERE id_catalog="
.$_GET['id_catalog'].
            ORDER BY 
$strtmp";
?>

следует заменить запросом
<?php
  $arr 
= array();
  
get_id_child($_GET['id_catalog']);
  
$query "SELECT * FROM product 
            WHERE id_catalog IN ("
.implode(",",$arr).")
            ORDER BY 
$strtmp";

  function 
get_id_child($id_catalog)
  {
    global 
$arr;
    
// Смотрим имеются ли у каталога подчинённые каталоги
    
$query "SELECT id_catalog FROM catalog 
              WHERE hide='show' AND id_parent="
.$id_catalog;
    
$cnt mysql_query($query);
    if(!
$cnt) exit(mysql_error());
    if(
mysql_num_rows($cnt) > 0)
    {
      while(
$catalog mysql_fetch_array($cnt))
      {
        
get_id_child($catalog['id_catalog']);
      }
      
$arr[] = $id_catalog;
    }
  }
?>

   
 
 автор: coerbi   (16.09.2006 в 14:30)   письмо автору
 
   для: cheops   (16.09.2006 в 14:01)
 

Ага въезжаю... но вот можно по подробнее о ранее не встречавшейся контрукции WHERE IN (); Как она работает и когда применяется ?

   
 
 автор: cheops   (16.09.2006 в 14:37)   письмо автору
 
   для: coerbi   (16.09.2006 в 14:30)
 

IN - это оператор, который проверяет входит ли левый аргумент в список справа. Например
6 IN (1,2,3,4,5,6)

вернёт истину (true), а
24 IN (1,2)

вернёт ложь (false).
Если в качестве левого аргумента стоит имя столбца, то запрос
SELECT * FROM tbl WHERE hide = 'show' AND id IN (1,2,3,115,4,5,6)

вернёт все записи для которых поле hide принимает значение show и чьё поле id равно какому-нибудь значению из ряда 1,2,3,115,4,5,6.

   
 
 автор: coerbi   (16.09.2006 в 15:17)   письмо автору
 
   для: cheops   (16.09.2006 в 14:37)
 

Спасибо !!! Только для того чтобы закрыть тему ответьте еще на один вопрос:
>В книге "Практика разработки Web-сайта" предполагаось что товарные позиции могут принадлежать и промежуточным каталогам? Но таком случае какой толк этим каталогам иметь подкаталоги и куда заносить товарные позиции??? Я правильно понял Ваш код в книге или нет ?

   
 
 автор: cheops   (16.09.2006 в 15:33)   письмо автору
 
   для: coerbi   (16.09.2006 в 15:17)
 

Не очень понятен вопрос? Что вас смущает, давайте на примере какого-нибудь конкретного каталога это рассмотрим?

   
 
 автор: coerbi   (16.09.2006 в 15:48)   письмо автору
 
   для: cheops   (16.09.2006 в 15:33)
 

К примеру:
КВАРТИРЫ
ЭЛИТНЫЕ
ОБЫЧНЫЕ
Но если каталог КВАРТИРЫ имеет собственный набор товарных позиций (SELECT * FROM product WHERE id_catalog="ключ каталога КВАРТИРЫ") => какой смысл иметь подкаталоги ЭЛИТНЫЕ И ОБЫЧНЫЕ ведь товарные позиции ссылаются именно на каталог КВАРТИРЫ и не знают что у него есть подкаталоги...
И потом, по здравому смыслу квартира не может принадлежать каталогу просто КВАРТИРЫ она обязательно или ЭЛИТНАЯ или ОБЫЧНАЯ......................?

   
 
 автор: coerbi   (16.09.2006 в 23:54)   письмо автору
 
   для: coerbi   (16.09.2006 в 15:48)
 

.....И тишина......

   
 
 автор: cheops   (17.09.2006 в 16:39)   письмо автору
 
   для: coerbi   (16.09.2006 в 15:48)
 

Нет, ну это лишь один из примеров организации каталога, вы можете ввести другие критерии, скажем районы или тип квартиры, количества комнат, ценовой диапазон, обмен, продажа, покупка и т.п.

   
Rambler's Top100
вверх

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