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

Фанат

oncle terrible
Команда форума
потихоньку мы переходим
нсли вы переходите на PDO так же, как перешли на mysqli - без плейсхолдеров - то это тоже бессмысленная работа

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

У меня к тебе вопрос. ты свой запрос на экран выводить не пробовал?
 

Boris

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


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

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

Фанат

oncle terrible
Команда форума
я не спрашивал, работает ли
я спросил, выводил ли ты свой запрос на экран.
видел ли ты вообще хоть раз в жизни запрос, который отправляешь в БД?
 

Boris

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

вот один из выводов
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
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
запрос целиком.
ты просишь нас оценить запрос.
но за все время ни разу не привел его здесь
 

Boris

Новичок
запрос целиком.
ты просишь нас оценить запрос.
но за все время ни разу не привел его здесь
прошу прощения
вот :
Код:
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 ;
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Когда вы пишите такие запросы, где-то в мире начинает грустить котейка ='(
 

Фанат

oncle terrible
Команда форума
насколько я понимаю, ты, вопреки своей декларации, как раз и перечисляешь в условии все возможные варианты товаров. Что означает переписывание запроса при добавлении товара.
Кстати, я не понял, почему для цветов ищем только два товара, а для материалов - три?
 

Boris

Новичок
насколько я понимаю, ты, вопреки своей декларации, как раз и перечисляешь в условии все возможные варианты товаров. Что означает переписывание запроса при добавлении товара.
Кстати, я не понял, почему для цветов ищем только два товара, а для материалов - три?
У товара есть , к примеру стол, основание, столешница и материал покрытия к примеру шпон, или краска, т.е материал основания, материал, столешницы и материал покрытия.
А с цветом, есть цвет основания и цвет столешницы.

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

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

я создавл тему на сайте phpclub.ru/talk/threads/создание-структуры-бд-для-товаров-с-разными-сущностями.78817/ в ней мне помогли и на основании этого я попытался сделать то что сделал.
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
мне кажется, что этот запрос не похож на тот.
но я могу ошибаться.
если у тебя вот это условие
(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, то должна быть одна таблица для материалов и цветов.
 

Boris

Новичок
мне кажется, что этот запрос не похож на тот.
но я могу ошибаться.
если у тебя вот это условие

жестко прописано в коде, а не собирается по частям, то он неправильный.
если ты делаешь 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
очень много комбинация и получится путаница, пытаюсь вот таким макаром сделать
 
Сверху