PHP.SU

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

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

> Найдено сообщений: 7
Alex_57_php Отправлено: 09 Марта, 2014 - 16:25:26 • Тема: Помогите достроить дерево категорий • Форум: Хранение данных, их вывод и обработка

Ответов: 0
Просмотров: 1010
Всем привет!
Есть таблица
Таблица категорий (Отобразить)


Есть скрипт который рекурсивно выводит категории в виде дерева

PHP:
скопировать код в буфер обмена
  1.  
  2. $cat_p = filter_input_var($_GET['cprod']);
  3.  
  4. //Выбираем данные из БД
  5. $result=do_query("SELECT * FROM  tovars_categories");
  6. //Если в базе данных есть записи, формируем массив
  7. if   (mysql_num_rows($result) > 0){
  8.     $cats = array();
  9. //В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
  10.     while($cat =  mysql_fetch_assoc($result)){
  11.         $cats_ID[$cat['id']][] = $cat;
  12.         $cats[$cat['parent_id']][$cat['id']] =  $cat;
  13.     }
  14. }
  15. // echo '<pre>';
  16. // print_r($cats);
  17. // echo '</pre>';
  18.  
  19. function build_tree($cats,$parent_id,$only_parent = false){
  20.     if(is_array($cats) and isset($cats[$parent_id])){
  21.        
  22.      
  23.            
  24.         if($only_parent==false){
  25.                 $tree = '<ul>';
  26.             foreach($cats[$parent_id] as $cat){  
  27.                             $tree .= '<li class="custom_id'.$cat['id'].'"><a class="" href="/?cprod='.$cat['id'].'">'.$cat['name'].'</a><span class="down"></span>';
  28.                 $tree .=  build_tree($cats,$cat['id']);
  29.                 $tree .= '</li>';
  30.                                  }
  31.                 $tree .= '</ul>';
  32.         }elseif(is_numeric($only_parent)){
  33.             $cat = $cats[$parent_id][$only_parent];
  34.             $tree = '<li class="custom_id'.$cat['id'].'"><a class="" href="/?cprod='.$cat['id'].'">'.$cat['name'].'</a><span class="down"></span>';
  35.             $tree .=  build_tree($cats,$cat['id']);
  36.             $tree .= '</li>';
  37.         }
  38.        
  39.     }
  40.     else return null;
  41.     return $tree;
  42. }
  43.  
  44. function find_parent ($tmp, $cur_id){
  45.     if($tmp[$cur_id][0]['parent_id']!=0){
  46.         return find_parent($tmp,$tmp[$cur_id][0]['parent_id']);
  47.     }
  48.     return (int)$tmp[$cur_id][0]['id'];
  49. }
  50.  


Вот так вывожу в темплейте
CODE (html):
скопировать код в буфер обмена
  1.  
  2.  <div class="box">
  3.           <div class="box-heading">Категории</div>
  4.           <div class="box-content box-category">
  5.             <ul id="cat_accordion">
  6.            
  7.  <?  echo build_tree($cats,0,find_parent($cats_ID,$cat_p)); ?>
  8.  </ul>
  9.           </div>
  10.         </div>
  11.  
  12.  


Скрипт не мой брал на просторах(немного лишь подправил)

Собственно все нормально работает, за исключением некоторых моментов, которые я не могу победить вторые сутки, поэтому прошу помощи у вас, господа профессионалы

Момент первый (просьба о помощи)

Определить что пользователь находится в текущей категории и добавить класс CSS для элемента <a>
Иначе говоря если GET совпадает с ID категории, нужно добавить класс

Я пробовал так:

PHP:
скопировать код в буфер обмена
  1. if($cat_p == $cat['id']){
  2.            $active = 'active';
  3.            }else{
  4.            $active = '';
  5.            }


PHP:
скопировать код в буфер обмена
  1. $tree .= '<li class="custom_id'.$cat['id'].'"><a class="'.$active.'" href="/?cprod='.$cat['id'].'">'.$cat['name'].'</a><span class="down"></span>';


Но не получается, пробовал еще вариантов 5, та же фигня, моск кипит ??? Непонял!

Момент второй и снова прошу о помощи Улыбка

Как не выводить самую главную категорию у которой parent_id равен нулю?

пробовал что-то типа этого

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if($cat['parent_id'] != 0){
  4.  
  5. }
  6.  


не фига не выходит Огорчение


Как выводит сейчас:

+Все для мужчин
+---Аксессуары и Сумки
+---Подкатегория
+---Подкатегория
+---Подкатегория
+---Мужская одежда
+---Подкатегория
+---Подкатегория
+---Подкатегория
+---Обувь
+---Подкатегория
+---Подкатегория
+---Подкатегория

Что я хочу сделать, при нахождении в любой подкатегории раздела "для мужчин"

+Аксессуары и Сумки
+---Подкатегория
+---Подкатегория
+---Подкатегория
+Мужская одежда
+---Подкатегория
+---Подкатегория
+---Подкатегория
+Обувь
+---Подкатегория
+---Подкатегория
+---Подкатегория

Т.е. без самой родительской категории с parent_id = 0

PS Заранее спасибо всем откликнувшимся и помогающим мне в этих вопросах
Alex_57_php Отправлено: 07 Марта, 2014 - 18:10:21 • Тема: Помогите построить(оптимизировать) запрос и вывод меню • Форум: Работа с СУБД

Ответов: 6
Просмотров: 1415
IllusionMH пишет:
формируйте дерево на основании связей


Как это сделать? Я с массивами не умею работать, покажите пример если несложно
Alex_57_php Отправлено: 07 Марта, 2014 - 16:57:19 • Тема: Помогите построить(оптимизировать) запрос и вывод меню • Форум: Работа с СУБД

Ответов: 6
Просмотров: 1415
Всем привет!

Мне необходимо вывести меню категорий товаров из БД. Меню трехуровневое.
Как это делаю я:
таблица (возьмем только товары для мужчин) (Отобразить)



Код:

Спойлер (Отобразить)


Вот сам результат этого творенья


-------------------------------- -------------------------------- ------

Собственно сам вопрос как все мои циклы объединить в один большой запрос и вывести результат в много мерном массиве например?

Сейчас у меня выходит до 200 запросов на одну загрузку страницы

Помогите пожалуйста
Alex_57_php Отправлено: 01 Февраля, 2014 - 10:04:20 • Тема: Закрвть соединение SQL нужен совет • Форум: Программирование на PHP

Ответов: 4
Просмотров: 416
DelphinPRO Спасибо!
Alex_57_php Отправлено: 01 Февраля, 2014 - 09:55:16 • Тема: Выборка по категории • Форум: Программирование на PHP

Ответов: 0
Просмотров: 335
Всем привет!

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

Как сделал я:

Запрос:


Ячейка category_id в таблице tovars:
Пример 1
|1||3||4||5||6||7|
Пример 2
|3||4||5|
Пример 3
|1||3||4||5|


Обработчик:
PHP:
скопировать код в буфер обмена
  1.  
  2. function show_from_cats_tovars() {
  3.  
  4. $tovar_with_category = '|'.$_GET['category'].'|';
  5.  
  6. $result_show_from_cats_tovars = do_query("SELECT * FROM tovars WHERE category_id LIKE '%".$tovar_with_category."%' ;", $link);
  7.  
  8. while($row_show_from_cats_tovars = mysql_fetch_array($result_show_from_cats_tovars))
  9. {
  10.  
  11. echo $row_show_from_cats_tovars['id'].' - '.$row_show_from_cats_tovars['name'].'<br><br>';
  12.  
  13. }
  14.  
  15. }
  16.  



Подскажите степень кривости и работоспособности данного способа, при работе с большим количеством товаров. Как лучше организовать такую выборку, подскажите или дайте направление чтения ))
--------------
PS Изначально хотел все загнать в массив и там выбирать, но знаний пока не хватает.
Alex_57_php Отправлено: 31 Января, 2014 - 14:52:03 • Тема: Закрвть соединение SQL нужен совет • Форум: Программирование на PHP

Ответов: 4
Просмотров: 416
imya пишет:
Неправильно думаете.
1 итерация цикла - 1 запрос.

Это понятно

Вот почему я так стал думать
Переписка с хостером

Я - 15:08:13: У меня вопрос
Я - 15:08:30: Я пишу сейчас парсер XML в БД
Х - 15:08:33: Добрый день
Я - 15:08:51: Есть ли какое либо ограничение на количество запросов в БД
Я - 15:08:59: На виртуальном хостинге?
Х - 15:10:04: максимальное количество одновременных соединений с сервером БД MySQL – 100
Я - 15:10:46: Если запросы в цикле, они считаются отновременными?
Х - 15:11:22: Если они поддерживают подключение то да

Вот откуда мои думки. Типа мы соединение же не закрываем, и получается одновременно много запросов по словам хостера. Т.е. при каждой итерации количество одновременных запросов увеличивается.

imya, в общем можно не забивать голову? Запросы получаются раздельными?
(Добавление)
Ntve можно закрывать. Проверил опытным путем. Запросы не суммируются.
Alex_57_php Отправлено: 31 Января, 2014 - 14:42:26 • Тема: Закрвть соединение SQL нужен совет • Форум: Программирование на PHP

Ответов: 4
Просмотров: 416
Всем привет!

У меня такая дилема. Я обрабатываю XML файл с последующей записью в БД.

Есть такой код
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $xml = simplexml_load_file('imported/tovars.xml');
  4.  
  5. #Пишем товары
  6.  
  7. foreach ($xml->tovars->tovar as $item) {
  8.  
  9. do_query("INSERT INTO tovars
  10.                                            (id,
  11.                                            name)
  12.                                            VALUES (
  13.                                            '".$item->id)."',
  14.                                            '".$item->name."'
  15.                                            );", $link);
  16. }
  17.  
  18.  


Вопрос вот какой. Допустим товаров будет 1000
На сервере стоит ограничение - не более 100 SQL запросов одновременно
Как мне записать в базу 1000 товаров

Пояснение - этот вопрос я задал т.к. думаю что во время цикла все запросы получаются одновременными, т.к. поддерживают соединение.

если ставить в этом цикле выдает ошибку и вообще ничего не пишет

Возможно я не прав, поправьте и помогите советом.

PS в поиск не отсылать ))

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB