|
|
|
| Всем привет!
впал в ступор. Не могу сделать подобие фильтра у товаров!
вот упрощенный запрос:
SELECT `id_test` FROM `test` WHERE
(
(`id_attr` =2 AND `id_val`=7)
AND
(`id_attr` =3 AND `id_val`=27)
AND
(`id_attr`=1 AND `value` = 'a:1:{i:0;s:1:"4";}')
... и.т.д.
)
|
задача: выбрать id по (атрибут=значение)
*** одиночная конструкция, работает - `id_attr` =2 AND `id_val`=7 , а в комбинации - нет
В чем ошибка?
Спасибо. | |
|
|
|
|
|
|
|
для: Denandi
(27.11.2013 в 16:19)
| | Ошибка в том, что `id_attr` не может одновременно быть равно и 1 и 2 и 3 и т.д.
Если у вас выбор по одной таблице по нескольким условиям одновременно, то ее (таблицу) нужно перемножать саму на себя столько раз, сколько условий используется.
SELECT *
FROM `test` AS t1
CROSS JOIN `test` AS t2
CROSS JOIN `test` AS t3
WHERE
t1.`id_attr` =2 AND t1.`id_val`=7 AND
t2.`id_attr` =3 AND t2.`id_val`=27 AND
t3.`id_attr` =1 AND t3.`value` = 'a:1:{i:0;s:1:"4";}'
|
| |
|
|
|
|
|
|
|
для: Sfinks
(28.11.2013 в 08:28)
| | Нет слов, одни эмоции. Затея рушится на глазах...
Но, тем ни менее - спасибо за подсказку, если б не вы сам бы не додумался. Знание - сила. | |
|
|
|
|
|
|
|
для: Sfinks
(28.11.2013 в 08:28)
| | >Ошибка в том, что `id_attr` не может одновременно быть равно и 1 и 2 и 3 и т.д.
вот еще один запрос, опять уперся в этот AND!!! что в этот раз, ведь одинаковых полей нет!
реально не понимаю, ну не алис же ляпать?! - erow AS er ...
SELECT `t`.`id_tov`
FROM `product` `t`
LEFT OUTER JOIN `erow` e ON ( e.`id_tov` = `t`.`id_tov` )
WHERE
t.id_attr =4
AND e.`value` = 'a:1:{i:0;s:1:"4";}'
AND e.`id_val` IN (7,27)
LIMIT 0 , 30
|
| |
|
|
|
|
|
|
|
для: Denandi
(02.12.2013 в 09:54)
| | А что не так? Не выдает результат? А он есть?
Попробуйте просто вывести всю промежуточную таблицу и найти там результат, удовлетворяющий вашим условиям:
/*
1. OUTER можно не писать
2. Если поля, по которым идет объединение называются одинаково, можно использовать USING()
*/
SELECT *
FROM `product` `t`
LEFT JOIN `erow` `e` USING(`id_tov`)
|
> ну не алис же ляпать?! - erow AS er ...
А он у вас не сляпан?иэто одно и то же.
P.S. Под новые вопросы лучше заводить новую тему. | |
|
|
|
|
|
|
|
для: Denandi
(27.11.2013 в 16:19)
| | Можно так еще:
select id_test from test
where (id_attr = 2 and id_val = 7) OR (id_attr = 3 and id_val = 27)
group by id_test
having count(id_test) = 2/*Кол-во условий*/
|
| |
|
|
|
|
|
|
|
для: Igorek
(28.11.2013 в 21:32)
| | Вы снова правы!
И по нагрузке ваш запрос намного легче.....
Старею =) | |
|
|
|
|
|
|
|
для: Sfinks
(30.11.2013 в 10:24)
| | и на старуху найдется проруха. Там же сразу очевидно было. что пары нужно через "или" объединять! | |
|
|
|