Boris
Новичок
Здравствуйте!
У меня есть две таблицы: color_product и material_product
В них есть id_product и id_color, id_material и part_product(часть товара)
У товара может быть несколько цветов и несколько материалов
Пользователь ищет товар, он может выбрать цвет, или несколько цветов.
Может выбрать материал товара или несколько материалов.
Может выбрать и цвет/цвета и материал/материалы вместе.
Делать проверку на каждый случай и составлять нужный select, комбинаций может быть много, так как товар может состоять из трех составляющих (дверь,корпус,столешница) и каждая из них иметь свой цвет, мне кажется не правильно и в конце концов все равно что-то упущу.
Я решил создать нечто универсальное, но боюсь, что что не так.
Прошу Вас посмотрите и поправьте или дайте какой-то совет.
Я проверяю если выбран хоть один цвет и создаю условия:
Проверяю если выбран хоть один материал и создаю условие:
чтобы не было пустого условия в IN я делаю flaf равный 0
получается что к примеру $p_material_door может иметь значение 012
Все это дело я запустил и сам удивился работает и делает выборку правильно, но честно есть сомнение, а именно не есть ли это просто фигня неправильная или еще хуже говнокод.
Спасибо Вам всем за время и внимание, буду рад Вашим замечаниям и идеям.
У меня есть две таблицы: color_product и material_product
В них есть id_product и id_color, id_material и part_product(часть товара)
У товара может быть несколько цветов и несколько материалов
Пользователь ищет товар, он может выбрать цвет, или несколько цветов.
Может выбрать материал товара или несколько материалов.
Может выбрать и цвет/цвета и материал/материалы вместе.
Делать проверку на каждый случай и составлять нужный select, комбинаций может быть много, так как товар может состоять из трех составляющих (дверь,корпус,столешница) и каждая из них иметь свой цвет, мне кажется не правильно и в конце концов все равно что-то упущу.
Я решил создать нечто универсальное, но боюсь, что что не так.
Прошу Вас посмотрите и поправьте или дайте какой-то совет.
Я проверяю если выбран хоть один цвет и создаю условия:
Код:
$string_from .= ',des_color as color';
$string_where_relationship_tables .= ' and products.id_product = color.id_product ';
$string_where_colors = ' and (
(color.products_part = 1 and color.colors_name IN('.mysqli_real_escape_string($link,$p_color_base).'))
or
(color.products_part = 2 and color.colors_name IN('.mysqli_real_escape_string($link,$p_color_door).'))
) ';
$string_group_by = 'group by color.id_product';
$string_having = 'having count(*) > 0'
Код:
$string_from .= ',des_products_material as material';
$string_where_relationship_tables .= ' and products.id_product = material.id_product ';
$string_where_materials = ' and (
(material.products_part = 1 and material.materials_name IN('.mysqli_real_escape_string($link,$p_material_base).'))
or
(material.products_part = 2 and material.materials_name IN('.mysqli_real_escape_string($link,$p_material_door).'))
or
(material.products_part = 3 and material.materials_name IN('.mysqli_real_escape_string($link,$p_material_cover).'))
) ';
$string_group_by = 'group by material.id_product';
$string_having = 'having count(*) > 0 ';
Код:
$p_material_base='0'.(implode(",",$_GET['material_base']));
$p_material_door='0'.(implode(",",$_GET['material_door']));
$p_material_cover='0'.(implode(",",$_GET['material_cover']));
$p_color_base = '0'.(implode(",",$_GET['color_base']));
$p_color_door = '0'.(implode(",",$_GET['color_door']));
Все это дело я запустил и сам удивился работает и делает выборку правильно, но честно есть сомнение, а именно не есть ли это просто фигня неправильная или еще хуже говнокод.
Спасибо Вам всем за время и внимание, буду рад Вашим замечаниям и идеям.
Последнее редактирование: