Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PHP & MySQL
Форумы портала PHP.SU » PHP » Программирование на PHP » PHP & MySQL

Страниц (2): [1] 2 »
 

1. Maksir - 06 Ноября, 2006 - 22:41:49 - перейти к сообщению
Если это возможно, покажите мне пожалуста, как сделать отображение информации в виде дерева.
Точнее сказать, мне это почти удалось. Вот вся трудность теперь в подмене изображений замыкающей линией "L" (или по-русски "Г")

Есть похожий скрипт с этой функцией "PHP TreeMenu" (http://www.woweb.ru/catalog/47/arch/001.zip), но он полностью на PHP (там чтение из строк - используются несколько другие методы) Мне не понятно, как это делается из MySQL

CODE (text):
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT t.id AS id, t.catalog_id AS catalog_id, t.categor_id AS categor_id,
  2. cl.title AS catalog,
  3. cg.title AS category, cg.title_id AS cg_id,
  4. t.marka, t.numer, t.rezume, t.ndate
  5.  
  6. FROM v_catalog cl, v_categoris cg, v_trade t
  7.  
  8. WHERE cl.id='".$_GET['cat']."'
  9. AND cl.id=t.catalog_id
  10. AND cg.id=t.categor_id
  11.  
  12. ORDER BY t.catalog_id, t.categor_id, t.id ASC") or die (mysql_error());
  13.  
  14. $_catalog = '';
  15. $_category = '';
  16. while($f=mysql_fetch_array($result))
  17. {      
  18.      $cg_id=HtmlSpecialChars($f['cg_id']);
  19.      $cat=HtmlSpecialChars($f['catalog_id']);
  20.      $pcat=HtmlSpecialChars($f['categor_id']);
  21.      $id=HtmlSpecialChars($f['id']);
  22.      $marka=HtmlSpecialChars($f['marka']);
  23.      $catalog=format_text($f['catalog']);
  24.      $category=format_text($f['category']);
  25.      $numer=format_text($f['numer']);
  26.      $rezume=format_text($f['rezume']);
  27.      $date=my_time($f['ndate']);
  28.      
  29.  
  30. $t='<tr><td><img src=img/t.gif></td><td BGCOLOR="#ffffff><div class="box">'.$category.'</div></td></tr>';
  31. $l='<tr><td><img src=img/l.gif></td><td BGCOLOR="#ffffff><div class="box">'.$category.'</div></td></tr>';
  32.  
  33.  
  34. if ($_category!=$category)
  35. {
  36.  
  37. echo $t;
  38.  
  39.   $_category=$category;
  40.  
  41. }  
  42.  
  43.  


Это рабочий код. Здесь три таблицы cl. (v_catalog) cg. (v_categoris) t. (v_trade) В общем-то это и видно из запроса SELECT после команды FROM
Всё работает. Но подмены изображения в конце цикла не могу себе представить.
2. Wange - 08 Ноября, 2006 - 16:52:48 - перейти к сообщению
изначально в мускульных таблицах создается такое отноошение чтобы понять что есть родительская структура и какая по отношению к предыдущей и последующей. так в цикле вывода мы проверяем отношение одного элемента к другому. в аналах используют рекурсию. обычно все определяет два поля id и pid. из базы по порядку принадлежности выбираются значения. в общем все просто. наверное. такие дела.
3. Maksir - 08 Ноября, 2006 - 22:42:35 - перейти к сообщению
Спасибо за ответ!
Я новечок в этих делах и для меня увы не всё так просто.
Значит, нужно как-то паказать в строке запроса, что нужно делать с последним id ?

В MySQL действительно всё сделано именно таким образом, что бы было удобно работать с базой. Особенно, когда база одна (одна и та же таблица), а категорий имеется несколько.

Мне это необходимо на работе. Недавно устроился на новую работу и почти без опыта. И базу начал ставить вполне серьёзно, ореинтируясь на MySQL, а там такой прибомбас... База работает, но её нужно ещё и показать на странице красиво... (чудаки, эти заказчики...)
4. Wange - 09 Ноября, 2006 - 11:12:30 - перейти к сообщению
Вот на сайте есть очень интересная статья http://php.su/articles/?cat=phpdb&page=004
5. Maksir - 09 Ноября, 2006 - 21:05:15 - перейти к сообщению
Cпасибо! =)

Эту статью видел. Сейчас заново пытаюсь в ней разобраться. Читаю. Но, некоторые вопросы возникают исходя уже из исходных примеров таблицы. Например, в столбце sortorder добавили нули. Там целых два примера и все цифры разные почему-то... Второе, смотрю на строку с запросом, откуда-то идёт сортировка по колонке title. О ней вообще не говорится ни слова в статье... Но, допустим, условно, она существует в этой самой таблице.
Третье, $unprocessed_rows_exist вообще не понятно откуда взялась такая функция, которая больше всего напоминает переменную...

Исходя из представленного примера, следует коментарий -- "Отмечу, что данный алгоритм не зацикливается при наличии строк с битым полем parent" -- исходя из этого, следует вывод, который наводит на мысль, что данный скрипт содран с какого-то скрипта... - Строка SELECT , образно описывает строку запроса по заданной в самой статье таблице. (кстати, авторам, - для наглядного примера, можно было бы и сократить данные в таблице, их слишком много.. трудно разобраться)

Вывод очевиден, - такую статью и я, могу написать. Радость (вот только погодите, найду ответ!)

Не обижайтесь пожалуста. Но, разобраться в изложеном примере, особенно для новечка, - ну очень сложно. Ниндзя

Если найду ответ, выложу в этом топике.
На мой взгляд, это поможет дургим пользователям больше, чем эта статья.
Исходя из моего примера, наглядно видно, что за таблицы в БД, и сколько таблиц вообще (исходя из строки SELECT это видно). Скрипт работает на 100%. Осталось только придумать вывод данных в древевидной форме.

Кстати, к приведённому мною скрипту, не хватает ещё кусочка. Забыл добавить оконцовку.
Вывод данных по категориям товаров (специфика товара в самом каталоге). Поскольку, все товары сортируются по категориям (спецификации). Сами категории содержатся в каждом каталоге (заголовке, названии товара). Ну, а самих таваров, или каталогов, может быть немеренное количество.


CODE (text):
скопировать код в буфер обмена
  1.  echo "<tr>
  2.     <td><img src=img/2i.gif></td>
  3.     <td><div class=box><A href='#' onclick=window.open('./id.php?cat=$cat&pcat=$pcat&pg=$id','','width=670,height=845,left=200,top=200')>$marka</a>
  4.     </div></td></tr>";
  5.    
  6.    
  7. }


Ну вот ещё, кстати, вывод данных об имеющихся каталогах

CODE (text):
скопировать код в буфер обмена
  1. //////////// Заголовки каталогов ..............
  2. print "<table style=width: 600px; border=1><tbody><tr valign=top><td wight=600px>";
  3. $result = mysql_query("SELECT id, title FROM v_catalog ORDER BY id ASC") or die (mysql_error());  
  4. $links = array();
  5. while($f=mysql_fetch_array($result)) {
  6.  $id=HtmlSpecialChars($f['id']);
  7.  $title=HtmlSpecialChars($f['title']);
  8.  
  9.  $links[] =  "<a href=?cat=$id>$title</a>";
  10. }
  11. echo implode(", ", $links);  
  12. print "</td></tr></tbody></table><br><br>";
  13. /////////// Конец заголовков каталогов


Ну что ещё нужно, что бы исходя из этого примера, наглядно увидеть структуру ?
Могу выложить структуру таблицы для создания базы, что бы данный скрипт заработал.
Но, это уже в следующий раз. Если кому-то это покажется интересным.
6. evgenijj - 10 Ноября, 2006 - 14:25:52 - перейти к сообщению
Во-первых, неправильно спроектирована структура БД. Здесь искусственно накладывается ограничение на уровень вложенности. Трехуровневый каталог - три таблицы. А если понадобится создать еще один уровень - создашь еще одну таблицу SUPERCATALOG? А еще один - MEGACATALOG? В твоем примере нет принципиальной разницы между каталогом и категорией. Каталог - это категория, для которой parentID=0 ( или NULL - это уж кому как больше нравится ).

Теперь, что касается картинки. Положим, мы выбираем из БД категории, для которых parentID=5:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $query = "SELECT id_ctg, title FROM categories WHERE parentID=5 ORDER BY sortorder";
  4. $res = mysql_query( $query );
  5. $cnt = mysql_num_rows( $res )
  6. if ( $cnt )
  7. {
  8.     $row = 1;
  9.     echo "<table>";
  10.     while( $ctg = mysql_fetch_array( $res ) )
  11.     {
  12.         if ( $row == $cnt )
  13.             echo "<tr><td><img src='end.gif' alt=''></td><td>".$ctg["title"]."</td></tr>";
  14.         else
  15.             echo "<tr><td><img src='continue.gif' alt=''></td><td>".$ctg["title"]."</td></tr>";
  16.         $row = $row + 1;
  17.     }
  18.     echo "</table>";
  19. }
  20. else
  21. {
  22.     echo "Пустая категория";
  23. }
  24. ?>
  25.  
7. Maksir - 10 Ноября, 2006 - 20:51:32 - перейти к сообщению
evgenijj пишет:
Во-первых, неправильно спроектирована структура БД.

Не согласен..
Ну, с чего вы так решили вдруг?
БД уже отработана и работает.
Там нет ничего лишнего. Конечно, можно было бы и переиначить по другому. Вы правы, там есть три таблицы. Они нужны для того, что бы - первая выводила все каталоги товаров. Это очень важно и сам SELECT запрос сортирует всё очень практично и без лишнех нагрузок на сервер. Во второй таблице содержатся категории товаров (на все каталоги, свои категории) Тоже, очень даже удобна, без лишних нагрузок. Все категории сортируются по присвоенному значению ID каждому каталогу. Ну и последняя, самая большая таблица. В ней все товары, из всех каталогов и категорий. В том то всё и дело, что таблица для товаров заполняется для всех каталогов одинаково. По этому, товаров, как и каталогов и категорий, может быть неограниченное количество. Так было задуманно с самого начала.

Просто, важно теперь вывести всё это в древевидной форме. От части, это уже удалось. Скрипт, который я изложил, выводит всё в древе, по категориям. Даже админку забацал. Но, есть ещё такой момент - показать графику, линии в древе. Вот, это уже сложнее. Конечно, может быть моя структура для этого не совсем пригодна и нуждается в дополнении. Сейчас, я как раз буду думать над этим.
А так, как вы говорите, - неправильно мол... Это не так. Всё работает и очень даже хорошо.

(Добавление)
evgenijj пишет:
Трехуровневый каталог - три таблицы.

Если точнее, была задуманна -- "каскадная таблица".
Да, именно эти уровни и делают эту БД такой многозадачной.

(Добавление)
evgenijj пишет:
А если понадобится создать еще один уровень - создашь еще одну таблицу SUPERCATALOG?

Нет... Просто, нужно будет тогда добавить ещё одну таблицу с товарами. Например, в данном примере, структуированна таблица разных типов существующих масел для разного рода использования. (всего их 12 шутк, включая ещё по каждому каталогу существуют свои категории, которые берутся из одно запроса SELECT) Только, таблицу с товарами, я её урезал. Таблица немного обширней, на самом деле. Что не меняет самой сути. По этому, можно смело предположить, что таблица с товарами уже - другая... Можно создать таблицу для деталей авто. (и вообще, любую другую таблицу) А в каталог и категории добавить лишь заголовки названий этих товаров. Вот и всё...

(Добавление)
Если уж конкретно говорить о том, что данный скрипт отображает. Вот ссылка http://www[dot]omv[dot]su/prod.php?1

БД и скрипт отлично работают. Но, видите, там графика. (кстати, сама графика линий будет переделана. Там, эти линии вообще.. можно и поизящней было бы их нарисовать) Самой БД там ещё нет. Она в разработке. Хотя, приведённый мною пример здесь, отображает всё именно так, как там на странице. На данной странице используется кусочек PHP и джава скрипт. База уже перебита на MySQL. Просто, трудность вся в том, что графика там. Замыкающие линии... и тп..

Думаю, конечно, как это порешить. Конечно, решение уже есть где-то. Но, я новечок вообще в программировании, и даже не программист (верстальщик - редактор). Борюсь на чистом энтузиазме, мне это всё интересно (собственно, как и любому другому web-редактору).
8. Maksir - 11 Ноября, 2006 - 18:07:42 - перейти к сообщению
evgenijj пишет:

Теперь, что касается картинки. Положим, мы выбираем из БД категории, для которых parentID=5:

Респект!
Кажицо пошло! Улыбка

Ваш код для подмены картинки очень помог! Спасибо!
Сейчас немного переконфигурирую и этот код заработает.
9. Maksir - 11 Ноября, 2006 - 20:12:07 - перейти к сообщению
У меня всё получилось!!!!!
Вы evgenijj просто гений!!!! :rotate:
Гениально всё!!!! (только БД у меня нурмульная! Улыбка ) Всё работает на этой БД
я всё понял!!!! Радость
(и главное, терь понял, как это делать)

Вот:
CODE (text):
скопировать код в буфер обмена
  1.          //// Выводим Категории
  2.         if ($_category!=$category) {
  3.         if ($row == $cnt)
  4.        
  5.             echo '<tr><td><img src=img/2l.gif></td><td BGCOLOR="#ffffff><div class="box">'.$category.'</div></td></tr>';
  6.          else
  7.             echo '<tr><td><img src=img/2t.gif></td><td BGCOLOR="#ffffff><div class="box">'.$category.'</div></td></tr>';
  8.         $row = $row++;
  9.         $_category=$category;
  10.  
  11.         }  
  12.        
  13.         //// Выводим Товары в категориях
  14.        
  15.         if ($row == $cnt)
  16.  
  17.          echo "<tr>
  18.     <td><img src=img/0.gif></td>
  19.     <td><div class=box><A href='#' onclick=window.open('./id.php?cat=$cat&pcat=$pcat&pg=$id','','width=670,height=845,left=200,top=200')>$marka</a>
  20.     </div></td></tr>";                            
  21.         else
  22.         echo "<tr>
  23.     <td><img src=img/2i.gif></td>
  24.     <td><div class=box><A href='#' onclick=window.open('./id.php?cat=$cat&pcat=$pcat&pg=$id','','width=670,height=845,left=200,top=200')>$marka</a>
  25.     </div></td></tr>";
  26.         $row++;
  27.     }
  28.     echo "</table>";


Только там две ячейки. И в товарах у меня замыкающая 0.gif (без изображения, хотя, его можно было бы просто и не писать. это для наглядности) Хотя, терь, можно сделать и на три ячейки, как это и было задуманно изначально.
О Боже, как я рад!!!! просто опкакаюсь щаз... Радость
10. evgenijj - 12 Ноября, 2006 - 17:44:50 - перейти к сообщению
Как мало человеку для счастья нужно Улыбка. Осталось сделать еще один шаг - признать тот факт, что структура БД не оптимальна. Постараюсь объяснить. Итак, есть каталог продукции некоторой фирмы. Для хранения информации о товарах и категориях используем две таблицы: CATEGORIES и PRODUCTS. Категория может содержать вложенные категории и/или товары. Проводя аналогию с файловой системой, директория может содержать вложенные директории и/или файлы. Некоторые из этих директорий могут лежать в корне логического диска ( напимер, D: ). Но это не делает их какими-то "особенными", чтобы хранить информацию о них в отдельной таблице БД. Каждый элемент таблиц CATEGORIES и PRODUCTS содержит ссылку на родительский элемент - id_parent.
Таблица CATEGORIES:
id_ctg - уникальный идентификатор категории
id_parent - ссылка на родительский элемент
title - название категории
sortorder - порядок сортировки
Таблица PRODUCTS:
id_prd - уникальный идентификатор товарной позиции
id_ctg - ссылка на родительский элемент
title - наименование товарной позиции
description - описание товара
sortorder - порядок сортировки

1;0;Категория 1;1
2;0;Категория 2;2
3;0;Категория 3;3
4;1;Категория 11;1
5;1;Категория 12;2
6;2;Категория 21;1
7;2;Категория 22;2

1;4;Товар 1;Описание товара 1;1
2;4;Товар 2;Описание товара 2;2
3;5;Товар 3;Описание товара 3;1
4;5;Товар 4;Описание товара 4;2
5;6;Товар 5;Описание товара 5;1
6;3;Товар 6;Описание товара 6;1
7;3;Товар 7;Описание товара 7;2

PHP:
скопировать код в буфер обмена
  1.  
  2. Категория 1
  3.   Категория 11
  4.     Товар 1
  5.     Товар 2
  6.   Категория 12
  7.     Товар 3
  8.     Товар 4
  9. Категория 2
  10.   Категория 21
  11.     Товар 5
  12.   Категория 22
  13.     Пустая категория
  14. Категория 3
  15.   Товар 6
  16.   Товар 7
  17.  

Чтобы получить из БД корневые категории (в твоей терминологии - каталоги) делаем запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. SELECT id_ctg, title FROM categories WHERE id_parent=0 ORDER BY sortorder;
  3.  

И не надо никакой третьей таблицы - а то она как пятое колесо в телеге: не несет никакой функциональной нагрузки, но создает дополнительные трудности при кодировании.
11. Maksir - 12 Ноября, 2006 - 18:55:20 - перейти к сообщению
Спасибо evgenijj ! Постараюсь разобраться с таблицей.

У меня такой вопрос. if ($row == $cnt)

Бился сегодня целый день. Хотел поставить условие таким образом, что бы было сравнение с последним id категории. Но, в цикле, естественно - не получается... На выходе от одной переменной получаются сразу все значения. И как это разделить, что бы в цикл передать для условия только последний id (замыкающего) этот id равен категории.

Мне это удаётся только так

CODE (text):
скопировать код в буфер обмена
  1.  
  2. while ($f=mysql_fetch_array($result))
  3. {
  4. в цикле перебираются все значения по запросу (по товарам) Если в каталоге товаров 5, и категорий 3 , то будет примерно вот так;
  5.  
  6. echo здесь все id  11233 (три категории , пять товаров)
  7.  
  8. }
  9.  
  10. echo здесь будет id 3 (не дать, не передать... а очень нужно! это последний id, он нужен для условия)


По поводу таблицы. У меня же существует 12 каталогов с продукцией. В каждой из которых лежит "любое количество" - категорий. В каждой категориии лежит "любое количество" - товаров. Выводятся они все и сортируются только по каталогу.

Если бы у меня было условие по одному каталогу, то конечно же и таблиц было бы две.
Извините, просто, не пойму, как может мишать эта таблица с каталогом. Там, в строке SELECT значение cl.id='".$_GET['cat']."' подставляется id каталога. То есть, если у меня 12 каталогов, то и все id в таблице cl каталогов идут строго от 1 до 12. Кликая по ссылкам каталогов, пользователь попадает в другие каталоги.

Конкретнее, вот можете посмотреть

http://www[dot]omv[dot]su/prod.php?1
http://www[dot]omv[dot]su/prod.php?2
http://www[dot]omv[dot]su/prod.php?3 и т.д. Меняется только id каталога. Товары и категории сортируются под этот запрос.

Всего - 12 каталогов. И они открываются все по своему значению id каждый каталог отдельно (по-сути, тот же постраничный вывод)

А вот дерево товаров выстраивается уже по этим двум таблицам, как это и у вас в примере. ( таблицу с каталогами можно не косаться вообще при продумывании кода вывода категорий. я так вообще пишу на отдельном файле, а вместо параметра GET подставляю любое число из каталога)

CODE (text):
скопировать код в буфер обмена
  1. --
  2. -- Структура таблицы `v_catalog`
  3. --
  4.  
  5. CREATE TABLE `v_catalog` (
  6.   `id` mediumint(8) unsigned NOT NULL auto_increment,
  7.   `title` mediumtext NOT NULL,
  8.   `ntitles` mediumtext,
  9.   PRIMARY KEY  (`id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=16 ;
  11.  
  12. --
  13. -- Структура таблицы `v_categoris`
  14. --
  15.  
  16. CREATE TABLE `v_categoris` (
  17.   `id` int(11) NOT NULL auto_increment,
  18.   `title_id` int(11) NOT NULL default '0',
  19.   `title` mediumtext NOT NULL,
  20.   PRIMARY KEY  (`id`)
  21. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;
  22.  
  23. --
  24. -- Структура таблицы `v_trade`
  25. --
  26.  
  27. CREATE TABLE `v_trade` (
  28.   `id` int(11) NOT NULL auto_increment,
  29.   `catalog_id` int(11) NOT NULL default '0',
  30.   `categor_id` int(11) NOT NULL default '0',
  31.   `marka` text,
  32.   `ndate` int(11) NOT NULL default '0',
  33.   PRIMARY KEY  (`id`)
  34. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8 ;
\n\n(Добавление)
Ну, я, практически понимаю, о чем вы толкуете. Тот же принцып работы скрипта применяется практически везде. Например, в phpBB - там и топики, и сообщения -- в каждой всего по две таблицы -> таблица заголовок и таблица текст. В каждой есть параметры, которые передаются с условием по id пользователя. (но всё-таки, пользователи - это уже третья таблица. Хотя, в моей задаче, можно вместо этой третьей таблицы в каждую строку с товарами подставить дополнительнюу колонку с названием каталога и id) но, что-то у меня не стыкуется.. Все равно, в цикле нужно как-то показать последний существующий в запросе id категории, потому что в последней категории идут сообщения с последним id категории (это самое максимальное значение, которое ровняется и подставляется совсем другая ветка, которая замыкает дерево)
12. evgenijj - 12 Ноября, 2006 - 21:36:21 - перейти к сообщению
Цитата:

Бился сегодня целый день. Хотел поставить условие таким образом, что бы было сравнение с последним id категории. Но, в цикле, естественно - не получается... На выходе от одной переменной получаются сразу все значения. И как это разделить, что бы в цикл передать для условия только последний id (замыкающего) этот id равен категории.

Честно - ничего не понял. Я примерно представляю, что тебе нужно - но у тебя на сайте и так все работает. Я бы сделал примерно так (код в работе не проверял - сам тестируй):
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. // +----------------+
  5. // |root_category 1 |
  6. // +----------------+
  7. // |                 +---------------+
  8. // +-----------------|subcategory 11 |
  9. // |                 +---------------+
  10. // |                 |                +---------+
  11. // |                 +----------------|product 1|
  12. // |                 |                +---------+
  13. // |                 |                +---------+
  14. // |                 +----------------|product 2|              
  15. // |                                  +---------+
  16. // |                 +---------------+
  17. // +-----------------|subcategory 12 |
  18. // |                 +---------------+
  19. // |                 |                +---------+
  20. // |                 +----------------|product 3|
  21. // |                                  +---------+
  22. // |                 +---------------+
  23. // +-----------------|subcategory 13 |
  24. //                   +---------------+
  25. //                   |                +---------+
  26. //                   +----------------|product 4|
  27. //                   |                +---------+
  28. //                   |                +---------+
  29. //                   +----------------|product 5|              
  30. //                                    +---------+
  31. // Картинки:
  32. // |
  33. // +- continue.gif
  34. // |
  35. //
  36. // |
  37. // | vertical.gif
  38. // |
  39. //
  40. // |
  41. // +- end.gif
  42.  
  43. // Корневые категории - для верхнего меню
  44. $query = "SELECT id_ctg, title FROM categories WHERE id_parent=0 ORDER BY sortorder";
  45. $res = mysql_query( $query );
  46. while ( $ctg = mysql_fetch_array( $res ) )
  47. {
  48.         $root[] = $ctg;
  49.         echo "<a href='".$_SERVER["PHP_SELF"]."?id_ctg="$ctg["id_ctg"]."'>".$ctg["title"]."</a>&nbsp;|";
  50. }
  51.  
  52. if ( !isset( $_GET["id_ctg"] ) ) $_GET["id_ctg"] = $root[0]["id_ctg"];
  53.  
  54. // Получаем подкатегории текущей корневой категории
  55. $query = "SELECT id_ctg, title FROM categories WHERE id_parent=".$_GET["id_ctg"]." ORDER BY sortorder";
  56. $res = mysql_query( $query );
  57. $cnt_ctg = mysql_num_rows( $res );
  58. $row_ctg = 1;
  59.  
  60. if ( $cnt_ctg )
  61. {
  62.         echo "<table>";
  63.         while ( $ctg = mysql_fetch_array( $res ) )
  64.         {
  65.                 if ( $cnt_ctg == $row_ctg )
  66.                 {
  67.                         echo "<tr><td>end.gif</td>
  68. <td><a href='".$_SERVER["PHP_SELF"]."?id_ctg="$ctg["id_ctg"]."'>".$ctg["title"]."</a></td>
  69. <td></td></tr>";
  70.                         $tmp = 1;
  71.                 }
  72.                 else
  73.                 {
  74.                         echo "<tr><td>continue.gif</td>
  75. <td><a href='".$_SERVER["PHP_SELF"]."?id_ctg="$ctg["id_ctg"]."'>".$ctg["title"]."</a></td>
  76. <td></td></tr>";
  77.                         $tmp = 0;                      
  78.                 }
  79.                        
  80.                 $q = "SELECT id_prd, title FROM products WHERE id_ctg=".$ctg["id_ctg"]." ORDER BY sortorder";
  81.                 $r = mysql_query( $q );
  82.                 $cnt_prd = mysql_num_rows( $r );
  83.                 $row_prd = 1;
  84.                
  85.                 if( $cnt_prd )
  86.                 {
  87.                         while( $prd = mysql_fetch_array( $r ) )
  88.                         {
  89.                                 if ( $cnt_prd == $row_prd )
  90.                                 {
  91.                                         if ( $tmp )
  92.                                         {
  93.                                                 echo "<tr><td></td>
  94. <td>end.gif</td>
  95. <td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  96. </td></tr>";
  97.                                         }
  98.                                         else
  99.                                         {
  100.                                                 echo "<tr><td>vertical.gif</td>
  101. <td>end.gif</td><td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  102. </td></tr>";
  103.                                                
  104.                                         }
  105.                                 }
  106.                                 else
  107.                                 {
  108.                                         if ( $tmp )
  109.                                         {
  110.                                                 echo "<tr><td></td><td>continue.gif</td>
  111. <td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  112. </td></tr>";
  113.                                         }
  114.                                         else
  115.                                         {
  116.                                                 echo "<tr><td>vertical.gif</td><td>continue.gif</td>
  117. <td><a href='".$_SERVER["PHP_SELF"]."?id_prd=".$prd["id_prd"]."'>".$prd["title"]."</a>
  118. </td></tr>";                                   
  119.                                         }
  120.                                 }
  121.                                 $row_prd = $row_prd + 1;
  122.                         }
  123.                 }
  124.                
  125.                 $row_ctg = $row_ctg + 1;
  126.         }
  127.         echo "</table>";
  128. }
  129.  
  130. ?>
  131.  
13. Maksir - 12 Ноября, 2006 - 21:54:34 - перейти к сообщению
evgenijj пишет:

Таблица CATEGORIES:

id_ctg - уникальный идентификатор категории
id_parent - ссылка на родительский элемент

title - название категории

sortorder - порядок сортировки



1;0;Категория 1;1
2;0;Категория 2;2
3;0;Категория 3;3
4;1;Категория 11;1
5;1;Категория 12;2
6;2;Категория 21;1
7;2;Категория 22;2


(начинаю въезжать потихоничку Ниндзя )
14. evgenijj - 12 Ноября, 2006 - 22:02:56 - перейти к сообщению
Так понятнее?

1;0;Категория_1;1
2;0;Категория_2;2
3;0;Категория_3;3
4;1;Категория_11;1
5;1;Категория_12;2
6;2;Категория_21;1
7;2;Категория_22;2

1;4;Товар_1;Описание_товара_1;1
2;4;Товар_2;Описание_товара_2;2
3;5;Товар_3;Описание_товара_3;1
4;5;Товар_4;Описание_товара_4;2
5;6;Товар_5;Описание_товара_5;1
6;3;Товар_6;Описание_товара_6;1
7;3;Товар_7;Описание_товара_7;2

Разделитель - ";"
15. Maksir - 13 Ноября, 2006 - 00:47:27 - перейти к сообщению
Нет.. структуру БД понять не могу...
CODE (text):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3. Выделить
  4.  
  5. id_ctg, title
  6. колонки
  7.  
  8. FROM categories
  9. из таблицы
  10.  
  11. WHERE id_parent=0
  12. где ....
  13.  
  14. ORDER BY sortorder
  15. сортировать по ....
  16.  


Какую-нить простенькую базу для наглядности можно? Не пойму, что с чем там и зачем... Ниндзя

Кстати, код правил. Но, база у меня никакая.. базу свою тоже дополнял. делал - там-демчик.. всё равно не получилось.\n\n(Добавление)
За код спасибо! Очень интересно. Улыбка

 

Powered by ExBB FM 1.0 RC1