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
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
Добрый вечер, сразу оговорюсь заказчик хочет именно так, но я не могу придумать как это сделать с наиболее меньшим затратам по ресурсам хостинга.
итак есть база данных с категориями товаров этим категориям вручную ставятся какие свойства будут у данной категории, далее при добавлении товара появляется выбор для выставления указанных свойств, то есть у одного артикула несколько товаров с разными свойствами (в данный момент это одежда), минимальное количество свойств 2 это цвет и размер, максимально n. Админская часть реализована, фильтр по n количеству свойств то же. На данный момент занимаюсь выводом именно артикула и на этой странице добавление в корзину, так вот заказчик хочет чтобы выводился товара а на нем элементы SELECT естественно зависимые, изначально они устанавливались в какой нибудь товар и если меняем цвет то фильтр перегружается и выводятся размеры этого цвета которые есть на складе ну и допустим сразу подставляются рост и другие параметры если есть, меняем размер переподставляется рост допустим ну и так далее, так вот я думаю при каждой смене любого параметра AJAX подгружать эти элементы с новыми значениями (то есть в запрашиваемом файле PHP выполнять довольно большой запрос при чем в цикле для каждого параметра) или можно как нибудь придумать иначе?
кто может что нибудь посоветовать
anakoman
Отправлено: 26 Февраля, 2014 - 18:31:03
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
По идее, если артикул один, то и запрос будет не тяжелым. (это если "шуба 1" - артикул 358685, а свойства цвет, размер и т.д. из одной тиблицы)
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 26 Февраля, 2014 - 18:33:57
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
не из одной
товары одна
свойства два
группа свойств 3
связь товар - значение ID из группы свойств (то есть само значение) 4
итого 4 таблицы (Добавление)
структура бд построена таким образом что можно создавать свойства 3х видов, текст или значение, да или нет и выбирается из списка. при последнем параметры для списка так же добавляются. То есть можно создать номенклатуру хоть с сотней свойств и их использовать в фильтре
anakoman
Отправлено: 26 Февраля, 2014 - 18:44:28
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
1. а почему сразу не подгружать все свойства и к товару и дальше через js фильтровать в зависимости от выбранного свойства - что-то вроде выбери регион, а потом выбери город из выбранного региона
2. (зависит от склада) после выбора артикула предложить доп.форму где-нибудь в стороне (размеры, цвета) и там новая кнопка подобрать
пока больше на ум ничего не приходит
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 26 Февраля, 2014 - 18:52:37
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
вот и мне так как те примеры которые представлены надо выбрать по порядку, а в данном случае надо чтобы все селекты установились на существующий товар далее менялись в зависимости от того какой селект был сменен то есть выбран цвет красный есть допустим красного 2 размера 50 и 54 и росты 180 - 50 размера, 182-54 и 180 - 54 размера первый фильтр стоит на 54 размере значит в селекте роста 2 позиции меняем на 50 там остается один рост, но этих параметров неизвестно сколько
anakoman
Отправлено: 26 Февраля, 2014 - 18:57:17
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
при таком раскладе в таблице каждого свойства нужно добавить все возможные свойства, т.е. все размеры, цвета, росты и т.д.
Еси с размерами и ростами проще, то цвета с возможностью добавлять через админку
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 26 Февраля, 2014 - 19:01:23
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
добавляется все, фильтр работает например для 6 параметров формируется такой запрос:
SELECT count(table_product.id)AS count_product FROM table_product LEFTJOIN table_product AS temp ON table_product.id=temp.parent LEFTJOIN table_product_property_value AS param_1 ON param_1.id_product=temp.id LEFTJOIN table_product_property_value AS param_2 ON param_2.id_product=temp.id LEFTJOIN table_product_property_value AS param_3 ON param_3.id_product=temp.id LEFTJOIN table_product_property_value AS param_4 ON param_4.id_product=temp.id LEFTJOIN table_product_property_value AS param_5 ON param_5.id_product=temp.id LEFTJOIN 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 GROUPBY table_product.id ORDERBY table_product.date DESCSELECT table_product.*, table_photo_product.photo_product4, table_product_brend.name AS name_brend FROM table_product LEFTJOIN table_product AS temp ON table_product.id=temp.parent LEFTJOIN table_product_property_value AS param_1 ON param_1.id_product=temp.id LEFTJOIN table_product_property_value AS param_2 ON param_2.id_product=temp.id LEFTJOIN table_product_property_value AS param_3 ON param_3.id_product=temp.id LEFTJOIN table_product_property_value AS param_4 ON param_4.id_product=temp.id LEFTJOIN table_product_property_value AS param_5 ON param_5.id_product=temp.id LEFTJOIN table_product_property_value AS param_6 ON param_6.id_product=temp.id LEFTJOIN 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 LEFTJOIN 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 GROUPBY table_product.id ORDERBY table_product.date DESCLIMIT ?,?
он формируется в цикле, то есть для данной реализации будет что то типо того, но происходить при каждой смене любого параметра, вот поэтому и спрашиваю это единственный путь?
anakoman
Отправлено: 26 Февраля, 2014 - 19:09:18
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
да, такой запрос в цикле - убийство для хостера (Добавление)
а это нужно делать для неизвестного количества товаров в корзине или перед попаданием в корзину (Добавление)
по идее чтобы что-то купить (добавить вкорзину) нужно сначала определиться с размерми цеветами и т.д., т.е в цикле этого не будет
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 26 Февраля, 2014 - 19:19:44
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
тот запрос что я привел это фильтр формирование страницы с товарами, а то что нужно это непосредственно один товар перед добавлением в корзину
anakoman
Отправлено: 26 Февраля, 2014 - 19:23:39
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
anakoman пишет:
1. а почему сразу не подгружать все свойства и к товару и дальше через js фильтровать в зависимости от выбранного свойства - что-то вроде выбери регион, а потом выбери город из выбранного региона
Если нужен такой код - примерный, могу прислать
щас только схожу за пивом
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 26 Февраля, 2014 - 19:27:53
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
да код мне не нужен, самому не проблема написать
anakoman
Отправлено: 26 Февраля, 2014 - 19:41:05
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
уточню вопрос - нужно упростить SQL?
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 26 Февраля, 2014 - 20:14:59
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
нет, просто предложить вариант формирования группы селектов зависящих друг от друга (Добавление)
Вобщем пока сделаю так:
у каждого SELECT DATA-ID=id свойства и класс например SELECT_PARAM
это все будет в блоке DIV
При изменении любого параметра отошлю данные об сменяемом блоке его значении и остальных блоках в массиве обработаю PHP и верну весь блок (перезагружу его). Посмотрю по быстродействию думаю пока данное решение пойдет.
anakoman
Отправлено: 27 Февраля, 2014 - 08:54:02
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 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".
" LEFT JOIN #__jbjobs_country b ON a.id_country = b.id".
" LEFT JOIN #__jbjobs_employer c ON a.employer_id = c.user_id".
" LEFT JOIN #__jbjobs_custom_field_value cv ON cv.jobid=a.id".
" LEFT JOIN #__jbjobs_comp_type d ON c.id_comp_type = d.id WHERE ".$where.
" ORDER BY is_hot DESC, a.is_featured DESC, a.publish_date DESC, a.id DESC";
$where - массив условий выбранных пользователем
----- Иногда, пока не спросишь - сам не поймешь
3d_killer
Отправлено: 27 Февраля, 2014 - 20:32:02
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
вобщем сделал на любое количество свойств, конечно нагрузка на сервак может быть но если немного свойств то работает шустро запрос следующего селекта увеличивает запрос так как условий становится больше параметры перегружаются AJAX незаметно, получилось даже лучше чем ожидал
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.