Mysql Прошу помочь с запросом MySQL.

Valera153

Новичок
Есть таблица и задача, полностью аналогичная уже задаваемому вопросу: http://phpclub.ru/talk/threads/Выборка-по-условию-из-нескольких-строк.73608/

Смысл: это таблица параметров элементов (id)
Надо выбрать только те id, у которых выполнены все необходимые условия.

Запрос: SELECT DISTINCT `id` FROM `tab` WHERE (`key`='k1' AND `VALUE`='v1') OR (`key`='k2' AND `VALUE`='v2') OR (`key`='k3' AND `VALUE`='v3')
дает неверный результат, т.к. он выбирает по "ИЛИ".
Если OR заменим на AND - то скрипт конечно ничего не найдет.
В общем, никак оптимальное решение не найду.
Можно конечно 3-мя запросами обработать, если ищем по 3-м условиям, но хочется грамотный, рациональный запрос.
 

artoodetoo

великий и ужасный
Смысл: это таблица параметров элементов (id)
Надо выбрать только те id, у которых выполнены все необходимые условия.
...
Если OR заменим на AND - то скрипт конечно ничего не найдет.
конечно a=1 AND a=2 ничего не найдет.
помоему ты не понимаешь чего хочешь

и кстати, id в этой таблице уникален? тогда DISTINCT убери, он не нужен.
 

Valera153

Новичок
поле uid - уникально. Поле id - нет.
В том и дело.
Таблица хранит множество свойств каждого элемента id. id - это уник элементов в другой таблице.
Мне надо найти id со свойствами и их значениями.
И чтобы в результате вывелись только те id, у которых все искомые свойства соответствуют необходимым значениям.

Еще можно вот чем дополнить: я всегда знаю, сколько параметров ищем, т.е. в приведенном примере точно знаем, что по 3-м.


В данном примере мы найдем 1 элемент - id=1.
 

artoodetoo

великий и ужасный
EAV?

ок, я осознал проблему. ох и корявый способ хранения! )))
Gas правильно подсказывает: берешь свой запрос с OR и усиливаешь его условием, что найдено именно три атрибута.
 

Valera153

Новичок
Да, получилось!!!
Спасибо!!!
Способ был подсмотрен в устроении таблиц хранения свойств системы Bitrix.
 

artoodetoo

великий и ужасный
удобный повод посрать на Битрикс, но на самом деле много где такое есть :(
 
Сверху