Доброго времени суток. Я новичок в программировании, но тут мне попалась задача, решение которой меня заинтересовало. В некоторой степени я знаком с mysql, правда пишу с помощью RedBeanPHP, плохо знаком с JOIN'ами, может в этом и есть проблема. Собственно задача: Имеется БД с 3мя таблицами 1. Товары (id, Название, Категория, Цена) 2. Свойства товаров (id, Название свойства) 3. Значение свойств товаров (id, id_Товара, id_Свойства, Значение). Есть набор свойств товара — цвет, размер, новинка. Необходимо выбрать все новинки зеленого цвета и вывести их на странице (верстка не имеет значения, просто в читаемом виде). В списке должна быть информация о размере и цвете товара. Кто может подсказать решение или наставить на нужный путь к решению задачи?
SELECT goods.name, color_values.value, size_values.value FROM goods, attributes_names AS color_names, attributes_names AS size_names, attributes_names AS novelty_names, attribute_values AS color_values, attribute_values AS size_values, attribute_values AS novelty_values WHERE goods.id=color_values.good_id AND color_values.value='Зеленый' AND color_values.attribute_id=color_names.id AND color_names.name='цвет' AND goods.id=size_values.good_id AND size_values.attribute_id=size_names.id AND size_names.name='размер' AND goods.id=novely_values.good_id AND novely_values.value=1 AND novely_values.attribute_id=novely_names.id AND novely_names.name='Новинка' Как-то так. Это для случая, когда все товары имеют размер; если могут быть безразмерные товары, то туда один JOIN надо вкорячить. И еще одно. Такой запрос может быть неоптимальным - зависит от сервера БД, от наполненности таблиц и от построенных на них индексах. Мне кажется, что в некоторых случаях будет быстрее вытащить ID свойств "цвет", "размер" и "новинка" одним запросом и, имея эти ID'ы на клиенте, упростить второй (главный) запрос. Но тут уже надо экспериментировать - что окажется быстрее.