Реализация запроса

CnecHa3

Постоялец
Регистрация
10 Фев 2007
Сообщения
105
Реакции
20
Есть ли ф-ция которая противоположна IN() т.е. когда условие не OR, a AND
value_id IN(1,13) = (value_id = 1 OR value_id = 13)


SELECT ... LEFT JOIN bp_item_filters f0 ON i.item_id=f0.item_id LEFT JOIN bp_item_filters f1 ON i.item_id=f1.item_id WHERE ... (f0.value_id = 1 AND f1.value_id = 13)
 
а такое вообще возможно?
вить такого чисто физически невозможно ...
PHP:
value_id IN(1,13) = (value_id = 1 AND  value_id = 13)

value_id не может одновременно равняться двум разным значениям

ну а тут
PHP:
WHERE ... (f0.value_id = 1 AND f1.value_id = 13)
вы используете просто разные значения из разных таблиц f0 и f1

---------
а нафига вообще такое надо?
 
из разных таблиц ни как нет, таблица одна
LEFT JOIN bp_item_filters f0 ON i.item_id=f0.item_id
LEFT JOIN bp_item_filters f1 ON i.item_id=f1.item_id
а надо было это чтобы выбрать item_id из bp_item_filters где value_id = 1 И value_id = 13
т.е. если value_id = 1 И value_id = 14, нужного мне элемента уже не будет
 
а ну да.. таблица одна... недосмотрел
ну в тогда:
таблица одна, лефт-джоины идентичны, ( только "псевдонимы" им дали разные: f0 и f1 )
соответственно результат объединения у них будет одинаковый

соответственно условие
value_id = 1 И value_id = 13

не выполнится так как value_id будут одновременно равны на уровне одной строки

или я дико туплю или же здесь что-то с логикой не то

предоставьте по возможности структуру всех таблиц участвующих в запросе ... возможно пример "реальных" данных ну и словесное описание того что должно получится после запроса .....
короче небольшой тестовый дамп - идеальный вариант
 
При добавления товара, выбираются определённые фильтра, в каждой категории разные фильтра, потом эти данные записываться в таблицу items, и подумал, чтобы не записывать все фильтра в "кашу" сделал таблицу item_filters куда идет item_id,filter_id,value_id пример:
items
-item_id = 1
item_filters
-item_id = 1
-filter_id = 1
-value_id = 1
-----------------------
-item_id = 1
-filter_id = 13
-value_id = 2
-----------------------
Потом когда уже сортирую товар, я могу выбрать фильтра
Если его значения 0, то не учитывается, если не 0, то ищем item_id у которого value_id = наш_выбранный_фильтр
И если выбрано ДВА и БОЛЕЕ фильтров, то их тоже надо учитывать со строгим равенством.

Вроде бы всё верно, но если не так, то направьте на путь истинный. Раньше не делал "сложные условия" П.С. item_id DISTINCT
 
походу так
PHP:
SELECT i.item_id,  t0.*,count(i.item_id) as 'qwe'
FROM  items as i
LEFT JOIN item_filters as t0
    ON t0.item_id = i.item_id 
  WHERE t0.filter_id  in (1,13) 
GROUP  BY i.item_id HAVING qwe >= 2

в блок IN (...) вписываем "фильтры" по которым ищем
а в qwe >= 2 подставляем условие по количеству совпадений фильтров
 
Назад
Сверху