PHP.SU

Программирование на PHP, MySQL и другие веб-технологии PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Пользователи Пользователи


 Страниц (5): « 1 2 3 [4] 5 »   

> Описание: подайте идею
ibe
Отправлено: 24 Августа, 2009 - 13:09:58
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Июль 2009  
Откуда: Russia, Saratov area






Нет. Я просто никак не пойму.
Вот сейчас поставил для наглядности DataLife engine. Посмотрел таблицу с категориями. Вот что там(см. скриншот)
Прикреплено изображение (Нажмите для увеличения)
noname.JPG


-----

Нажмите для увеличения


Нажмите для увеличения


Нажмите для увеличения
 
 Top
Stierus
Отправлено: 24 Августа, 2009 - 13:23:51
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 1063
Дата рег-ции: Дек. 2008  
Откуда: Москваль






И что не понятно ?

есть id - он индивидуален, как серия и номер паспорта
есть pid - это id того раздела, которому ты являешься "потомком"

ну собери ты лестницу сам

id parent_id name


1 0 прадед
2 1 дед
3 2 отец
4 3 я


у меня id 4, мой родитель - элемент с id 3 (у меня в Parent_id это записано) ... смотрим, что у нас под элементом с id 3 ... блин, это ж отец ... мистика, а что у него в Parent_id стоит? ... вах, кто-то с id 2 ... кто бы это мог быть?

Ну на столько голову отключать нельзя же

-----
Человек на 70% состоит из воды, а огурец – на 90%. Несложными математическими вычислениями можно подсчитать, что человек на 65% огурец.
 
 Top
Roler
Отправлено: 24 Августа, 2009 - 13:25:20
Post Id



Full Member


Покинул форум
Сообщений всего: 410
Дата рег-ции: Авг. 2008  
Откуда: Россия






ibe
parent_id - это id родительской категории.
Данные лежат так, а когда выводятся категории - то всё забирается в массив, и по этому массиву проходятся Улыбка

P.S. Опередили.

(Отредактировано автором: 24 Августа, 2009 - 13:25:44)

 
 Top
ibe
Отправлено: 24 Августа, 2009 - 14:26:15
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Июль 2009  
Откуда: Russia, Saratov area






При таком варианте:
PHP:
скопировать код в буфер обмена
  1. $q = mysql_query("SELECT * FROM categories");
  2. while ($row = mysql_fetch_row($q)) { // в row будет id, parent_id, caption
  3.         $categs[ $row[1] ][] = array($row[0], $row[2]); // ну сам всё видишь.
  4. }
  5. var_dump($categs); // и всё увидишь

получил вот это:
CODE (text):
скопировать код в буфер обмена
  1.     array(8) {
  2.   [1]=>
  3.   array(1) {
  4.     [0]=>
  5.     array(2) {
  6.       [0]=>
  7.       string(2) "PC"
  8.       [1]=>
  9.       string(1) "0"
  10.     }
  11.   }
  12.   [2]=>
  13.   array(1) {
  14.     [0]=>
  15.     array(2) {
  16.       [0]=>
  17.       string(3) "PSP"
  18.       [1]=>
  19.       string(1) "0"
  20.     }
  21.   }
  22.   [3]=>
  23.   array(1) {
  24.     [0]=>
  25.     array(2) {
  26.       [0]=>
  27.       string(7) "XBOX360"
  28.       [1]=>
  29.       string(1) "0"
  30.     }
  31.   }
  32.   [4]=>
  33.   array(1) {
  34.     [0]=>
  35.     array(2) {
  36.       [0]=>
  37.       string(12) "PlayStation3"
  38.       [1]=>
  39.       string(1) "0"
  40.     }
  41.   }
  42.   [5]=>
  43.   array(1) {
  44.     [0]=>
  45.     array(2) {
  46.       [0]=>
  47.       string(5) "Flash"
  48.       [1]=>
  49.       string(1) "0"
  50.     }
  51.   }
  52.   [6]=>
  53.   array(1) {
  54.     [0]=>
  55.     array(2) {
  56.       [0]=>
  57.       string(6) "Mobile"
  58.       [1]=>
  59.       string(1) "0"
  60.     }
  61.   }
  62.   [7]=>
  63.   array(1) {
  64.     [0]=>
  65.     array(2) {
  66.       [0]=>
  67.       string(7) "Новости"
  68.       [1]=>
  69.       string(2) "1"
  70.     }
  71.   }
  72.   [8]=>
  73.   array(1) {
  74.     [0]=>
  75.     array(2) {
  76.       [0]=>
  77.       string(6) "Статьи"
  78.       [1]=>
  79.       string(2) "1"
  80.     }
  81.   }
  82. }


-----

Нажмите для увеличения


Нажмите для увеличения


Нажмите для увеличения
 
 Top
Champion Супермодератор
Отправлено: 24 Августа, 2009 - 14:52:04
Post Id



Эксперт


Покинул форум
Сообщений всего: 3426
Дата рег-ции: Авг. 2008  
Откуда: Москва






ibe, думай, что делаешь. Если бы ты хоть чуть-чуть пытался понять, что ты делаешь, уже закончил бы давно с этим вопросом.
Я тебе давал запрос SELECT id, parent_id, caption FROM categories.
В созданной тобой таблице id и parent ты поменял местамиб а индексы в массиве - нет. И получилсоь совсем не то. Исправляй, смотри, думай.
(Добавление)
Блин, все скопировал, даже комментарии не трогал. А список в select зачем-то поменял. Умник)
 
 Top
ibe
Отправлено: 24 Августа, 2009 - 22:12:10
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Июль 2009  
Откуда: Russia, Saratov area






Запарели уже эти категории...нифига ничего не получается.
Уже 2-ой день сижу с ними. С массивами я не пониамю как это можно сделать, ибо категории по parent_id не получается отсортировать вообще.
Нахмурился

-----

Нажмите для увеличения


Нажмите для увеличения


Нажмите для увеличения
 
 Top
Champion Супермодератор
Отправлено: 25 Августа, 2009 - 08:45:13
Post Id



Эксперт


Покинул форум
Сообщений всего: 3426
Дата рег-ции: Авг. 2008  
Откуда: Москва






ibe пишет:
по parent_id не получается отсортировать вообще.
ORDER BY. И перечисли поля в нужном порядке в селекте. И приведи сюда получивший правильный var_dump. И посмотри на него. И подумай.

А вообще, это означает, что либо ты слишком рано взялся за базы данных, либо вообще с ними не знакомился и сразу подменю лезешь с их помощью делать.
 
 Top
Stierus
Отправлено: 25 Августа, 2009 - 10:04:14
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 1063
Дата рег-ции: Дек. 2008  
Откуда: Москваль






http://phpclub.ru/detail/article/2002-06-03 если и после этого останутся вопросы - откладывай свою затею на неопределённый срок, видимо, рано.

http://phpclub.ru/detail/article/db_tree вдруг, для тебя это покажется проще (маловероятно, но мало ли)

-----
Человек на 70% состоит из воды, а огурец – на 90%. Несложными математическими вычислениями можно подсчитать, что человек на 65% огурец.
 
 Top
ibe
Отправлено: 25 Августа, 2009 - 16:14:49
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Июль 2009  
Откуда: Russia, Saratov area






var_dump выводит все категории что есть в базе в массив. А мне нужно вывести только родительские категории, ибо не родительские категории уже готовы:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $style = 11;
  3.  $cats1 = mysql_query("SELECT * FROM categories WHERE parent_id=0");
  4.     while  ($cats = mysql_fetch_array($cats1))
  5.    {
  6.  
  7.                 echo " <li class='tn".$style."'>
  8.                         <a href='/view.php?cat=".$cats['id']."'><span>".$cats['title']."</span></a>             </li>";
  9.  
  10.  $style = $style + 1;      
  11.    }
  12.  
  13. ?>

Теперь нужно вывести только нижнее меню, которое состоит из родительских категорий. Как - я не знаю. Пробовал через WHERE parent_id=id... не выходит.
-----
Вы неправильно меня поняли.

(Отредактировано автором: 25 Августа, 2009 - 16:16:34)

-----

Нажмите для увеличения


Нажмите для увеличения


Нажмите для увеличения

 
 Top
Champion Супермодератор
Отправлено: 25 Августа, 2009 - 18:18:24
Post Id



Эксперт


Покинул форум
Сообщений всего: 3426
Дата рег-ции: Авг. 2008  
Откуда: Москва






Ты специально дубом прикидываешься? Я такое первый раз вижу, что человеку на протяжении почти 60 сообщений объясняют как меню с подменю построить. Причем говорят как сделать, а он 3й или какой там раз, делает не понятно как ...
Перечитай внимательно все сообщения, начиная с того, где я написал select. Прочитай этот select 1000 раз. Найди, чем он отличается от твоего. Заметь, что 2 раза я тебе уже эти отличия говорил
 
 Top
_tango
Отправлено: 05 Апреля, 2010 - 03:41:53
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2010  
Откуда: Казахстан






Я, честно говоря, даже боюсь заикаться в этой ветке, о подкатегориях Ниндзя
Но выхода другого у меня нет, так что рискну Радость , похоже, что у всех жертв курса Жени Попова одни и те же проблемы Радость
Ситуация у меня совершенно аналогичная. Имеется база: id, parent_id, title
По вашей рекомендации, сделал запрос и создал из него в цикле массив:

PHP:
скопировать код в буфер обмена
  1. $queryresult = mysql_query('SELECT id, parent_id, title FROM allcategories ORDER BY parent_id, id');
  2. while ($row = mysql_fetch_assoc($queryresult)) {
  3.         $cat[$row['parent_id']][] = array($row['id'], $row['title']);
  4. }

Получился многомерный массив. Но у него нет той же структуры вложенности, что и у таблицы, здесь в первом элементе массива содержатся категории, а в остальных подкатегории:
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(5) {
  2.   [0]=>
  3.   array(4) {
  4.     [0]=>
  5.     array(2) {
  6.       [0]=>
  7.       string(1) "1"
  8.       [1]=>
  9.       string(20) "категория_1"
  10.     }
  11.     [1]=>
  12.     array(2) {
  13.       [0]=>
  14.       string(1) "2"
  15.       [1]=>
  16.       string(20) "категория_2"
  17.     }
  18.     [2]=>
  19.     array(2) {
  20.       [0]=>
  21.       string(1) "3"
  22.       [1]=>
  23.       string(20) "категория_3"
  24.     }
  25.     [3]=>
  26.     array(2) {
  27.       [0]=>
  28.       string(1) "4"
  29.       [1]=>
  30.       string(20) "категория_4"
  31.     }
  32.   }
  33.   [1]=>
  34.   array(4) {
  35.     [0]=>
  36.     array(2) {
  37.       [0]=>
  38.       string(1) "5"
  39.       [1]=>
  40.       string(28) "подкатегория_1_1"
  41.     }
  42.     [1]=>
  43.     array(2) {
  44.       [0]=>
  45.       string(1) "6"
  46.       [1]=>
  47.       string(28) "подкатегория_1_2"
  48.     }
  49.     [2]=>
  50.     array(2) {
  51.       [0]=>
  52.       string(1) "7"
  53.       [1]=>
  54.       string(28) "подкатегория_1_3"
  55.     }
  56.     [3]=>
  57.     array(2) {
  58.       [0]=>
  59.       string(1) "8"
  60.       [1]=>
  61.       string(28) "подкатегория_1_4"
  62.     }
  63.   }
  64.   [2]=>
  65.   array(4) {
  66.     [0]=>
  67.     array(2) {
  68.       [0]=>
  69.       string(2) "13"
  70.       [1]=>
  71.       string(28) "подкатегория_2_1"
  72.     }
  73.     [1]=>
  74.     array(2) {
  75.       [0]=>
  76.       string(2) "14"
  77.       [1]=>
  78.       string(28) "подкатегория_2_2"
  79.     }
  80.     [2]=>
  81.     array(2) {
  82.       [0]=>
  83.       string(2) "15"
  84.       [1]=>
  85.       string(28) "подкатегория_2_3"
  86.     }
  87.     [3]=>
  88.     array(2) {
  89.       [0]=>
  90.       string(2) "16"
  91.       [1]=>
  92.       string(28) "подкатегория_2_4"
  93.     }
  94.   }
  95.   [3]=>
  96.   array(4) {
  97.     [0]=>
  98.     array(2) {
  99.       [0]=>
  100.       string(1) "9"
  101.       [1]=>
  102.       string(28) "подкатегория_3_1"
  103.     }
  104.     [1]=>
  105.     array(2) {
  106.       [0]=>
  107.       string(2) "10"
  108.       [1]=>
  109.       string(28) "подкатегория_3_2"
  110.     }
  111.     [2]=>
  112.     array(2) {
  113.       [0]=>
  114.       string(2) "11"
  115.       [1]=>
  116.       string(28) "подкатегория_3_3"
  117.     }
  118.     [3]=>
  119.     array(2) {
  120.       [0]=>
  121.       string(2) "12"
  122.       [1]=>
  123.       string(28) "подкатегория_3_4"
  124.     }
  125.   }
  126.   [4]=>
  127.   array(3) {
  128.     [0]=>
  129.     array(2) {
  130.       [0]=>
  131.       string(2) "17"
  132.       [1]=>
  133.       string(28) "подкатегория_4_1"
  134.     }
  135.     [1]=>
  136.     array(2) {
  137.       [0]=>
  138.       string(2) "18"
  139.       [1]=>
  140.       string(28) "подкатегория_4_2"
  141.     }
  142.     [2]=>
  143.     array(2) {
  144.       [0]=>
  145.       string(2) "19"
  146.       [1]=>
  147.       string(28) "подкатегория_4_3"
  148.     }
  149.   }
  150. }
  151.  


Проблема в том, что с комбинаторикой у меня дела не важно обстоят Огорчение
Подскажите пожалуйста, как обойти массив, чтобы вывести категории и подкатегории в правильной последовательности?
 
 Top
Champion Супермодератор
Отправлено: 05 Апреля, 2010 - 11:01:32
Post Id



Эксперт


Покинул форум
Сообщений всего: 3426
Дата рег-ции: Авг. 2008  
Откуда: Москва






Комбинаторика тут не важна. Обойти массив надо циклом foreach. Получшь номер категории и массив ее элементов.
 
 Top
JustUserR Модератор
Отправлено: 05 Апреля, 2010 - 11:58:36
Post Id



Эксперт


Покинул форум
Сообщений всего: 5854
Дата рег-ции: Июнь 2009  






_tango пишет:
Подскажите пожалуйста, как обойти массив, чтобы вывести категории и подкатегории в правильной последовательности?
Если массив уже многомерный то функция print_r как раз выведет вам в нужной последовательности с сохранением уровня вложенности Улыбка

-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Хороший хостинг от 15 рублей в месяц (За 40 МБ места) - http://ihost.oks71.ru
Бесплатная учебная литература по программированию - http://progbook.ru
 
 Top
_tango
Отправлено: 06 Апреля, 2010 - 01:34:27
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2010  
Откуда: Казахстан






Вот, создал Радость
Но как то уж очень натянуто получилось Однако
Господа мэтры, помогите покрасивше сделать?
Пожалуйста Закатив глазки

PHP:
скопировать код в буфер обмена
  1. $queryresult = mysql_query('SELECT id, parent_id, title FROM testcat ORDER BY parent_id, id');
  2. while ($row = mysql_fetch_assoc($queryresult)) {
  3.         $cat[$row['parent_id']][] = array($row['id'], $row['title']);
  4. }
  5.  
  6. foreach ($cat as $id1 => $v1 ) // Тут создаю массив с названиями категорий
  7. {
  8.         if($id1==0)
  9.                 foreach ($v1 as $id2 => $v2)
  10.                 {
  11.                         $titlecat[$id2+1] = $v2[1];
  12.                 }
  13. }
  14.  
  15. foreach ($cat as $id1 => $v1 )
  16. {
  17.         echo $titlecat[$id1]."<br />";
  18.         foreach ($v1 as $id2 => $v2)
  19.         {
  20.                 if($id1!=0)
  21.                 echo $v2[1]."<br />";
  22.         }
  23. }
  24.  


Выводится вот в таком виде:

категория_1
подкатегория_1_1
подкатегория_1_2
подкатегория_1_3
подкатегория_1_4
категория_2
подкатегория_2_1
подкатегория_2_2
подкатегория_2_3
подкатегория_2_4
категория_3
подкатегория_3_1
подкатегория_3_2
подкатегория_3_3
подкатегория_3_4
категория_4
подкатегория_4_1
подкатегория_4_2
подкатегория_4_3

(Отредактировано автором: 06 Апреля, 2010 - 03:26:37)

 
 Top
JustUserR Модератор
Отправлено: 06 Апреля, 2010 - 13:23:10
Post Id



Эксперт


Покинул форум
Сообщений всего: 5854
Дата рег-ции: Июнь 2009  






_tango пишет:
Господа мэтры, помогите покрасивше сделать?
Если хотите можете сделать рекурсивную обработку чтобы можно было работать с произвольной глубиной подкатегорий Улыбка

-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Хороший хостинг от 15 рублей в месяц (За 40 МБ места) - http://ihost.oks71.ru
Бесплатная учебная литература по программированию - http://progbook.ru
 
 Top
Страниц (5): « 1 2 3 [4] 5 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




 
Powered by ExBB FM 1.0 RC1. InvisionExBB