Естественно, мускул не показывал нужные результаты при более чем одной паре r.id_row = '...' AND r.rows_val='...';
Смог найтие решеие задачи только двумя способоами:
1. С использованием sphinx, который это сможет.
2. С использованием мускула, но при каждом дополнительном параметре придётся делать дополнительный INNER JOIN:
SELECT*FROM items JOIN(SELECT...) filtered_items ON id_item=items.id
----- PostgreSQL DBA
Zuldek
Отправлено: 05 Марта, 2014 - 10:11:27
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
Мелкий пишет:
Если не требуется наложение условий, по типу "для id_row=37 найти item_id, удовлетворяющие rows_val=1 и 2 одновременно"
Именно это и требуется, к сожалению, но лишь для одного параметра.
То есть, допустим, есть десяток пар:
AND id_row = 37 AND rows_val = 2
AND id_row = 5 AND rows_val = 16
AND id_row = 45 AND rows_val = 'some-val'
AND id_row = 100 AND rows_val between 90 AND 54
...
И есть только один фильтр, для которого нужно:
AND id_row = 39 AND (rows_val = 2 OR rows_val = 3 OR rows_val >= 4) (Добавление)
Вот думаю не лучше-ли сделать ещё отдельный join результирующей временной таблицы к rows для этого параметра?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Zuldek пишет:
И есть только один дополнительный параметр (количество комнат)
Комнат ведь не может быть одновременно 2 и 3 у одного item, тогда мой вариант годится.
Например, id_row=199 - это вид из окна. val, например, представляет вид на реку, вид на лес. Мой вариант усложнится, если потребуется найти item с видом из окна на лес с рекой (т.е. одновременно виден и лес и река), а не на хотя бы что-нибудь одно из них.
----- PostgreSQL DBA
Zuldek
Отправлено: 05 Марта, 2014 - 10:51:47
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.