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 :: Логика свойств товара из элементов select

 PHP.SU

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


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

> Описание: Логика свойств товара из элементов select
3d_killer
Отправлено: 26 Февраля, 2014 - 18:17:58
Post Id



Участник


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


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




Добрый вечер, сразу оговорюсь заказчик хочет именно так, но я не могу придумать как это сделать с наиболее меньшим затратам по ресурсам хостинга.
итак есть база данных с категориями товаров этим категориям вручную ставятся какие свойства будут у данной категории, далее при добавлении товара появляется выбор для выставления указанных свойств, то есть у одного артикула несколько товаров с разными свойствами (в данный момент это одежда), минимальное количество свойств 2 это цвет и размер, максимально n. Админская часть реализована, фильтр по n количеству свойств то же. На данный момент занимаюсь выводом именно артикула и на этой странице добавление в корзину, так вот заказчик хочет чтобы выводился товара а на нем элементы SELECT естественно зависимые, изначально они устанавливались в какой нибудь товар и если меняем цвет то фильтр перегружается и выводятся размеры этого цвета которые есть на складе ну и допустим сразу подставляются рост и другие параметры если есть, меняем размер переподставляется рост допустим ну и так далее, так вот я думаю при каждой смене любого параметра AJAX подгружать эти элементы с новыми значениями (то есть в запрашиваемом файле PHP выполнять довольно большой запрос при чем в цикле для каждого параметра) или можно как нибудь придумать иначе?
кто может что нибудь посоветовать
 
My status
 Top
anakoman
Отправлено: 26 Февраля, 2014 - 18:31:03
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




По идее, если артикул один, то и запрос будет не тяжелым. (это если "шуба 1" - артикул 358685, а свойства цвет, размер и т.д. из одной тиблицы)


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 26 Февраля, 2014 - 18:33:57
Post Id



Участник


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


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




не из одной
товары одна
свойства два
группа свойств 3
связь товар - значение ID из группы свойств (то есть само значение) 4
итого 4 таблицы
(Добавление)
структура бд построена таким образом что можно создавать свойства 3х видов, текст или значение, да или нет и выбирается из списка. при последнем параметры для списка так же добавляются. То есть можно создать номенклатуру хоть с сотней свойств и их использовать в фильтре
 
My status
 Top
anakoman
Отправлено: 26 Февраля, 2014 - 18:44:28
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




1. а почему сразу не подгружать все свойства и к товару и дальше через js фильтровать в зависимости от выбранного свойства - что-то вроде выбери регион, а потом выбери город из выбранного региона

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

пока больше на ум ничего не приходит


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 26 Февраля, 2014 - 18:52:37
Post Id



Участник


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


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




вот и мне так как те примеры которые представлены надо выбрать по порядку, а в данном случае надо чтобы все селекты установились на существующий товар далее менялись в зависимости от того какой селект был сменен то есть выбран цвет красный есть допустим красного 2 размера 50 и 54 и росты 180 - 50 размера, 182-54 и 180 - 54 размера первый фильтр стоит на 54 размере значит в селекте роста 2 позиции меняем на 50 там остается один рост, но этих параметров неизвестно сколько
 
My status
 Top
anakoman
Отправлено: 26 Февраля, 2014 - 18:57:17
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




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

Еси с размерами и ростами проще, то цвета с возможностью добавлять через админку


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 26 Февраля, 2014 - 19:01:23
Post Id



Участник


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


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




добавляется все, фильтр работает например для 6 параметров формируется такой запрос:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT count(table_product.id) AS count_product FROM table_product LEFT JOIN table_product AS temp ON table_product.id=temp.parent LEFT JOIN table_product_property_value AS param_1 ON param_1.id_product=temp.id LEFT JOIN table_product_property_value AS param_2 ON param_2.id_product=temp.id LEFT JOIN table_product_property_value AS param_3 ON param_3.id_product=temp.id LEFT JOIN table_product_property_value AS param_4 ON param_4.id_product=temp.id LEFT JOIN table_product_property_value AS param_5 ON param_5.id_product=temp.id LEFT JOIN table_product_property_value AS param_6 ON param_6.id_product=temp.id WHERE temp.category_id IN (?,?,?) AND table_product.visible=1 AND table_product.brend=? AND temp.color=? AND table_product.price >= ? AND table_product.price <= ? AND param_1.id_param=1 AND param_1.value=25 AND param_2.id_param=2 AND param_2.value=44 AND param_3.id_param=3 AND param_3.value=36 AND param_4.id_param=4 AND param_4.value=69 AND param_5.id_param=5 AND param_5.value=54 AND param_6.id_param=6 AND param_6.value=4 GROUP BY table_product.id ORDER BY table_product.date DESC SELECT table_product.*, table_photo_product.photo_product4, table_product_brend.name AS name_brend FROM table_product LEFT JOIN table_product AS temp ON table_product.id=temp.parent LEFT JOIN table_product_property_value AS param_1 ON param_1.id_product=temp.id LEFT JOIN table_product_property_value AS param_2 ON param_2.id_product=temp.id LEFT JOIN table_product_property_value AS param_3 ON param_3.id_product=temp.id LEFT JOIN table_product_property_value AS param_4 ON param_4.id_product=temp.id LEFT JOIN table_product_property_value AS param_5 ON param_5.id_product=temp.id LEFT JOIN table_product_property_value AS param_6 ON param_6.id_product=temp.id LEFT JOIN table_photo_product ON table_photo_product.id_articul=table_product.id AND table_photo_product.nomber=1 AND table_photo_product.id_color=table_product.color LEFT JOIN table_product_brend ON table_product_brend.id=table_product.brend WHERE temp.category_id IN (?,?,?) AND table_product.visible=1 AND table_product.brend=? AND temp.color=? AND table_product.price >= ? AND table_product.price <= ? AND param_1.id_param=1 AND param_1.value=25 AND param_2.id_param=2 AND param_2.value=44 AND param_3.id_param=3 AND param_3.value=36 AND param_4.id_param=4 AND param_4.value=69 AND param_5.id_param=5 AND param_5.value=54 AND param_6.id_param=6 AND param_6.value=4 GROUP BY table_product.id ORDER BY table_product.date DESC LIMIT ?,?
  3.  

он формируется в цикле, то есть для данной реализации будет что то типо того, но происходить при каждой смене любого параметра, вот поэтому и спрашиваю это единственный путь?
 
My status
 Top
anakoman
Отправлено: 26 Февраля, 2014 - 19:09:18
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




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


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 26 Февраля, 2014 - 19:19:44
Post Id



Участник


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


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




тот запрос что я привел это фильтр формирование страницы с товарами, а то что нужно это непосредственно один товар перед добавлением в корзину
 
My status
 Top
anakoman
Отправлено: 26 Февраля, 2014 - 19:23:39
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




anakoman пишет:
1. а почему сразу не подгружать все свойства и к товару и дальше через js фильтровать в зависимости от выбранного свойства - что-то вроде выбери регион, а потом выбери город из выбранного региона


Если нужен такой код - примерный, могу прислать

щас только схожу за пивом Радость


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 26 Февраля, 2014 - 19:27:53
Post Id



Участник


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


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




да код мне не нужен, самому не проблема написать
 
My status
 Top
anakoman
Отправлено: 26 Февраля, 2014 - 19:41:05
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




уточню вопрос - нужно упростить SQL?


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 26 Февраля, 2014 - 20:14:59
Post Id



Участник


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


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




нет, просто предложить вариант формирования группы селектов зависящих друг от друга
(Добавление)
Вобщем пока сделаю так:
у каждого SELECT DATA-ID=id свойства и класс например SELECT_PARAM
это все будет в блоке DIV
При изменении любого параметра отошлю данные об сменяемом блоке его значении и остальных блоках в массиве обработаю PHP и верну весь блок (перезагружу его). Посмотрю по быстродействию думаю пока данное решение пойдет.
 
My status
 Top
anakoman
Отправлено: 27 Февраля, 2014 - 08:54:02
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


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




У меня сделано вот так. Попробуй перевести это на свой лад
PHP:
скопировать код в буфер обмена
  1.                 $query ="SELECT DISTINCT a.*,b.country,b.id AS countryid, c.comp_name, c.show_comp_name, comp_type ,if(now()<a.hotjob_expire, true, false) is_hot FROM #__jbjobs_job a".
  2. " LEFT JOIN #__jbjobs_country b ON a.id_country = b.id".
  3.  " LEFT JOIN #__jbjobs_employer c ON a.employer_id = c.user_id".
  4.  " LEFT JOIN #__jbjobs_custom_field_value cv ON cv.jobid=a.id".
  5. " LEFT JOIN #__jbjobs_comp_type d ON c.id_comp_type = d.id WHERE ".$where.
  6. " ORDER BY is_hot DESC, a.is_featured DESC, a.publish_date DESC, a.id DESC";


$where - массив условий выбранных пользователем


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
3d_killer
Отправлено: 27 Февраля, 2014 - 20:32:02
Post Id



Участник


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


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




вобщем сделал на любое количество свойств, конечно нагрузка на сервак может быть но если немного свойств то работает шустро запрос следующего селекта увеличивает запрос так как условий становится больше параметры перегружаются AJAX незаметно, получилось даже лучше чем ожидал
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB