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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: выбор раздела вместе со всеми подразделами

 PHP.SU

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


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

> Без описания
leshiy_SV
Отправлено: 19 Мая, 2010 - 12:30:01
Post Id



Гость


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


Помог: 0 раз(а)




Задача такая. выбрать из базы раздел и все его подразделы включая и их под подразделы тоже. Структура базы такая id | name | sid
делаю так:
PHP:
скопировать код в буфер обмена
  1. $sql_res = array(); // массив который содержит id каталогов
  2. function Scan_SQL($sql){
  3.         global $sql_res;
  4.         $sql_r = false;
  5.         $ok = false;
  6.         foreach($sql as $s)
  7.         {
  8.                 $query = "SELECT id FROM  `categories` WHERE `sid` = ".$s." ";
  9.                 $result_sql = mysql_query($query);
  10.                 WHILE($result = mysql_fetch_array($result_sql,MYSQL_ASSOC))
  11.                 {
  12.                         $sql_r[] .= $result['id'];
  13.                         $sql_res[] .= $result['id'];
  14.                         $ok = true;
  15.                         echo $result['id']." _нашлось<br>";
  16.                 }
  17.         }
  18.         IF($sql_r !== false) Scan_SQL($sql_r);
  19.         return $sql_res;
  20. }
  21. $id[]=1;
  22. $arr = Scan_SQL($id);
  23. print_r($arr);
  24.  

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

(Отредактировано автором: 19 Мая, 2010 - 14:48:28)

 
 Top
Djin_dj
Отправлено: 19 Мая, 2010 - 13:11:04
Post Id



Частый гость


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


Помог: 0 раз(а)




Походу не все так просто, у тебя древовидная структура разделов!? Тогда тебе надо гуглить деревья в SQL там много инфы.

Понимаешь чтобы найти корень нет вопросов он тебе отобразит все разделы с заданным сидом, а вот если тебе нужно выбрать все подразделы из конкретного сида как ты построишь запрос!?

Раньше я делал Таблицу линковочную где указывал ид родителя, потом почитав стал делать с левелом этого подраздела то есть если есть раздел 1_1 и его левел 1 а парент 1, то он понимал и возвращал мне все подразделы раздела 1_1.

Короче ищи, готового решения и стандартного тут не может быть, смотря для чего использовать и количество вложений
 
 Top
leshiy_SV
Отправлено: 19 Мая, 2010 - 13:22:27
Post Id



Гость


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


Помог: 0 раз(а)




Djin_dj что то не очень понял ход твоих мыслей. мне нужно просто чтобы задаешь id раздела, ищешь все подразделы, у которых sid = id, заносишь их в массив $sql_r и потом проверяешь уже найденные id из массива $sql_r в разделах поля sid путем повторного вызова функции и т.д.
 
 Top
Djin_dj
Отправлено: 19 Мая, 2010 - 14:39:15
Post Id



Частый гость


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


Помог: 0 раз(а)




leshiy_SV пишет:
у которых sid = id

а если надо отобразить новости или товары не только раздела 1 но и его подразделов?

Ты делаешь запрос SELECT * FROM Razdel WHERE Razdel_ID=1

он тебе отобразит все новости или товары только раздела 1 но никак не Подраздела 2 у которого Razdel_ID=2 и Razdel_Sid=1
Теперь понятно!?
 
 Top
leshiy_SV
Отправлено: 19 Мая, 2010 - 15:03:17
Post Id



Гость


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


Помог: 0 раз(а)




мне содержание (т.е новости или товары), которые входят в этот раздел или подраздел не нужны. нужны только id разделов, которые являются включением определенного раздела
пример вида id раздел sid
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1 раздел 0
  2. -2 подраздел 1
  3. --5 подраздел 2
  4. ---8 подраздел 5
  5. -3 подраздел 1
  6. --6 подраздел 3
  7. 7 раздел 0

так вот указываешь например id 1 и выбираются все включенные подразделы в раздел 1, а это 2, 3, 5, 6, 8
 
 Top
Djin_dj
Отправлено: 19 Мая, 2010 - 15:06:30
Post Id



Частый гость


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


Помог: 0 раз(а)




leshiy_SV пишет:
мне содержание (т.е новости или товары), которые входят в этот раздел или подраздел не нужны. нужны только id разделов, которые являются включением определенного раздела
пример вида id раздел sid
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1 раздел 0
  2. -2 подраздел 1
  3. --5 подраздел 2
  4. ---8 подраздел 5
  5. -3 подраздел 1
  6. --6 подраздел 3
  7. 7 раздел 0

так вот указываешь например id 1 и выбираются все включенные подразделы в раздел 1, а это 2, 3, 5, 6, 8

У тебя указанный запрос по sid=1 выдаст только раздел 2 и 3 и все
 
 Top
leshiy_SV
Отправлено: 19 Мая, 2010 - 15:09:29
Post Id



Гость


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


Помог: 0 раз(а)




leshiy_SV пишет:
IF($sql_r !== false) Scan_SQL($sql_r);

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

(Отредактировано автором: 19 Мая, 2010 - 15:17:10)

 
 Top
JustUserR
Отправлено: 19 Мая, 2010 - 15:36:14
Post Id



Активный участник


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


Помог: 17 раз(а)




leshiy_SV пишет:
Рекурсия, функция вызывается повторно и проверяет уже найденные id на наличие в них подразделов и так далее пока больше подразделов не останеться
Если вам необходимо вывести разделы и подразделы всех уровней то можете поступить следующми образом - выбрать все разделы из БД и сохранять их в дерево которое по сути является многомерных хеш-массивом следующим образом - ключом в хеш-массиве будет являться имя раздела в значение ссылка на его подраздел и соответственно null будет термиринующим значением


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
leshiy_SV
Отправлено: 19 Мая, 2010 - 15:47:01
Post Id



Гость


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


Помог: 0 раз(а)




JustUserR спасибо за подсказку.
JustUserR пишет:
сохранять их в дерево которое по сути является многомерных хеш-массивом следующим образом - ключом в хеш-массиве будет являться имя раздела в значение ссылка на его подраздел и соответственно null будет термиринующим значением

можно небольшой примерчик
сделал вот так
PHP:
скопировать код в буфер обмена
  1. $qq = array();
  2.                 $query = "SELECT id, cid FROM `categories`";
  3.                 $result_sql = mysql_query($query);
  4.                 WHILE($result = mysql_fetch_array($result_sql,MYSQL_ASSOC))
  5.                 {
  6.                         $qq[$result['id']] = $result['cid'];
  7.                 }
  8. print_r($qq);

(Отредактировано автором: 20 Мая, 2010 - 09:03:47)

 
 Top
JustUserR
Отправлено: 19 Мая, 2010 - 16:07:53
Post Id



Активный участник


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


Помог: 17 раз(а)




leshiy_SV пишет:
JustUserR спасибо за подсказку.
Можно небольшой примерчик Сделал вот так
Пожалуйста! В принципе похожий пример с построением дерева разделов уже рассматривался и я предлагал готовое решение - здесь http://forum.php.su/topic.php?fo...65891#1271165891 приведена функция которая из массива элементов и индексов их родительских элементов формирует дерево - вам нужно лишь при проходе по mysql_fetch_row скопировать элементы в массив по образцу и передать его на обработку


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


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB