Потому и говорю «учи SQL». Ты не совсем понимаешь принципа работы базы данных. Каждая выбранная строка должна соответствовать всем указанным условиям. Возьми из всех своих строк только одну. Будет ли в ней name равняться сразу и 'shape' и 'processing_edge'? Это физически не возможно. У тебя должно быть примерно так:
WHERE ( ( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 ) AND `modResource`.`parent` IN (156,178,179,180,181,182,183,184,185,186,187,188,189,190,191) AND ( ( `TemplateVar`.`name` = 'shape' AND `TVResources`.`value` = 'rectangle' ) OR ( `TemplateVar`.`name` = 'processing_edge' AND `TVResources`.`value` = '10' ) ) )