В диалоге формируется условие для поиска, причем возможны разные сочетания для разных параметров, например: [sql]t1.t1_s1_id in(select s1_id from s1 where like '%%') OR t1.t1_s2_id in (select s2_id from s2 where like '%%')[/sql] делаю union вариантов может быть с десяток, у них произвольные сочетания, делаю PHP: $conditions[]=" select ..." и PHP: $out=implode(' union ',$conditions); бывает [sql]where x1 in ('.$out.') or x2 in ('.$out.')[/sql] Сейчас распечатал один такой запрос - он занял ровно два листа А4. [sql]select ... from ... ( select id from t1 like $x union select id from t2 like $x union select id from t3 like $x union select id from t4 like $x ) or ( select id from t1 like $x union select id from t2 like $x union select id from t3 like $x union select id from t4 like $x ) [/sql] По скорости это оптимал. Но все равно что-то неправильно (с). Причем скорее всего в структуре.