Mysql Создание динамического запроса с использованием having и groupby

  • Автор темы Автор темы Boris
  • Дата начала Дата начала
потихоньку мы переходим
нсли вы переходите на PDO так же, как перешли на mysqli - без плейсхолдеров - то это тоже бессмысленная работа

хм, по идеи не только, где увидели это ?
в запросе. который всегда вернет только 1 цвет.

У меня к тебе вопрос. ты свой запрос на экран выводить не пробовал?
 
нсли вы переходите на PDO так же, как перешли на mysqli - без плейсхолдеров - то это тоже бессмысленная работа


в запросе. который всегда вернет только 1 цвет.

У меня к тебе вопрос. ты свой запрос на экран выводить не пробовал?
По поводу плейсхолдеров, все принял к сведению, спасибо.
Пробовал, и удивлен, все работает, но как я и писал, сомнения не покидают.
Подскажите как правильно создать эту часть запроса. Я буду очень благодарен.
 
я не спрашивал, работает ли
я спросил, выводил ли ты свой запрос на экран.
видел ли ты вообще хоть раз в жизни запрос, который отправляешь в БД?
 
я не спрашивал, работает ли
я спросил, выводил ли ты свой запрос на экран.
видел ли ты вообще хоть раз в жизни запрос, который отправляешь в БД?
да , я выводил на экран запрос который отправляю в бд.

вот один из выводов
HTML:
and (
    (material.products_part = 1 and material.materials_name IN(0,49))
    or (material.products_part = 2 and material.materials_name IN(0))
    or (material.products_part = 3 and material.materials_name IN(0,109))
)
and (
    (color.products_part = 1 and color.colors_name IN(0,2))
    or
    (color.products_part = 2 and color.colors_name IN(0))
)
group by material.id_product,color.id_product
having count(*) > 0
 
Последнее редактирование:
запрос целиком.
ты просишь нас оценить запрос.
но за все время ни разу не привел его здесь
 
запрос целиком.
ты просишь нас оценить запрос.
но за все время ни разу не привел его здесь
прошу прощения
вот :
Код:
SELECT *
FROM tbl_company_names as names,
tbl_company_images_products as products,
tbl_page_up as page_up ,
tbl_material as material,
tbl_color as color
WHERE names.uniq_id = products.uniq_id
and names.users_login = products.users_login
and products.uniq_id = page_up.uniq_id
and products.users_login = page_up.users_login
and products.id_product = material.id_product
and products.id_product = color.id_product
and products.name_product = 5
and names.paid = 1
and products.checked = 0
and (
    (material.products_part = 1 and material.materials_name IN(0,49))
    or (material.products_part = 2 and material.materials_name IN(0))
    or (material.products_part = 3 and material.materials_name IN(0,109))
)
and (
    (color.products_part = 1 and color.colors_name IN(0,2))
    or (color.products_part = 2 and color.colors_name IN(0))
)
group by material.id_product,color.id_product
having count(*) > 0
ORDER BY page_up.date_page_up DESC ;
 
Когда вы пишите такие запросы, где-то в мире начинает грустить котейка ='(
 
насколько я понимаю, ты, вопреки своей декларации, как раз и перечисляешь в условии все возможные варианты товаров. Что означает переписывание запроса при добавлении товара.
Кстати, я не понял, почему для цветов ищем только два товара, а для материалов - три?
 
насколько я понимаю, ты, вопреки своей декларации, как раз и перечисляешь в условии все возможные варианты товаров. Что означает переписывание запроса при добавлении товара.
Кстати, я не понял, почему для цветов ищем только два товара, а для материалов - три?
У товара есть , к примеру стол, основание, столешница и материал покрытия к примеру шпон, или краска, т.е материал основания, материал, столешницы и материал покрытия.
А с цветом, есть цвет основания и цвет столешницы.

Пользователь ищет товар, он может выбрать цвет, или несколько цветов.
Может выбрать материал товара или несколько материалов.
Может выбрать и цвет/цвета и материал/материалы вместе.

пример, ищем стол со стеклянной столешнецей, деревянным основанием покрашенным в белый цвет

я создавл тему на сайте phpclub.ru/talk/threads/создание-структуры-бд-для-товаров-с-разными-сущностями.78817/ в ней мне помогли и на основании этого я попытался сделать то что сделал.
 
Последнее редактирование:
мне кажется, что этот запрос не похож на тот.
но я могу ошибаться.
если у тебя вот это условие
(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).'))
) ';
жестко прописано в коде, а не собирается по частям, то он неправильный.
если ты делаешь eav, то должна быть одна таблица для материалов и цветов.
 
мне кажется, что этот запрос не похож на тот.
но я могу ошибаться.
если у тебя вот это условие

жестко прописано в коде, а не собирается по частям, то он неправильный.
если ты делаешь eav, то должна быть одна таблица для материалов и цветов.
подскажите а как правильно? у меня не eav, у меня на каждый товар есть своя отдельная таблица описаний и есть единая таблица с одинаковыми данными и есть таблица цвета и таблица материалов. из таблицы описаний я проверяю если есть выделенные данные то добавляю в стринг запроса, а вот с цветом и материалом надо как то решить. честно говоря не понимаю как пока.
по идеи я проверяю если есть массивы с материалами то я добавляю в стринг :
PHP:
and (
    (material.products_part = 1 and material.materials_name IN(0,49))
    or (material.products_part = 2 and material.materials_name IN(0))
    or (material.products_part = 3 and material.materials_name IN(0,109))
)
если есть массив с цветом то в стринг добавляю :
PHP:
and (
    (color.products_part = 1 and color.colors_name IN(0,2))
    or (color.products_part = 2 and color.colors_name IN(0))
)
если и то и другое то все вместе.
Я не делаю проверку если есть массив с материалами 1 или 2 или 3 и массив с цветом 1 или 2
очень много комбинация и получится путаница, пытаюсь вот таким макаром сделать
 
Сверху