Ответов: 2 Просмотров: 29
|
Проблема выборки.
есть база данных с такими таблицами(указываю упрощённо, потому что таблиц больше но проблемная ситуация только в одной):
products - тут лежат все продукты с их числовыми параметрами
у неё есть колонки products_id products_model
products_to_products_extra_field s тут мы указываем какое доп. свойство есть у продукта и какое у него значение(а у доп свойства может быть множество, например: доп свойство размер, значения доп свойства размер - 41 и 42)
Вид:
products_id(id продукта) products_extra_fields_id('id доп. свойства) products_extra_fields_value(значение1 доп. свойства)
CODE ( htmlphp):
скопировать код в буфер обмена
'1' 'цвет' 'белый' '1' 'цвет' 'синий' '1' 'вес' '32' '1' 'вес' '44' '2' 'цвет' 'белый' '2' 'цвет' 'синий'
теперь задача выбрать все products_id и products_model в таблице products
у которых products_extra_fields_id и products_extra_fields_value
равны 'цвет' и 'белый' а также 'вес' и '32'
формирую запрос:
CODE ( SQL):
скопировать код в буфер обмена
SELECT p.products_id, p.products_model, FROM products_to_products_extra_fields p2pef, products p WHERE p.products_id = p2pef.products_id AND (p2pef.products_extra_fields_id = 'цвет' AND p2pef.products_extra_fields_value = 'белый') AND (p2pef.products_extra_fields_id = 'вес' AND p2pef.products_extra_fields_value = '32')
так возвращает 0
CODE ( SQL):
скопировать код в буфер обмена
SELECT p.products_id, p.products_model, FROM products_to_products_extra_fields p2pef, products p WHERE p.products_id = p2pef.products_id AND (p2pef.products_extra_fields_id = 'цвет' AND p2pef.products_extra_fields_value = 'белый') OR (p2pef.products_extra_fields_id = 'вес' AND p2pef.products_extra_fields_value = '32')
так выводит и те в которых p2pef.products_extra_fields_id = 'цвет' and p2pef.products_extra_fields_valu e = 'белый', и те в которых p2pef.products_extra_fields_id = 'вес' and p2pef.products_extra_fields_valu e = '32'
Причём один и тот же товар выводит то количество раз, которое соответствует количеству доп. свойств у него тобиш колличеству его products_id в таблице p2pef. Но тут всё понятно, это породило условие p.products_id = p2pef.products_id и решил я эту проблему использовав select distinct, но это только решило проблему дубликатов.
В общем мне кажется что я не правильно логически построил запрос, только вот как сделать это верно? |