To jest PHP ale dokładnie ten sam problem:
$Where='';
$Having='';
if($HaveAzonId==2) $Having.="(HaveAzonId)\t"; else if($HaveAzonId==1) $Having.="(not HaveAzonId)\t";
if($HaveAgrements==2) $Having.="(not HaveAgrements)\t"; else if($HaveAgrements==1) $Having.="(HaveAgrements)\t";
if($HaveAuthorsId==2) $Having.="(not HaveAuthorsId)\t"; else if($HaveAuthorsId==1) $Having.="(HaveAuthorsId)\t";
if($HaveDomain==2) $Having.="(not HaveDomain)\t"; else if($HaveDomain==1) $Having.="(HaveDomain)\t";
if($HaveAbstract==2) $Having.="(not HaveAbstract)\t"; else if($HaveAbstract==1) $Having.="(HaveAbstract)\t";
if($$HaveKeywords==2) $Having.="(not HaveKeywords)\t"; else if($HaveKeywords==1) $Having.="(HaveKeywords)\t";
if(strlen($Having)>0) $Having=' having '.str_replace("\t","and",trim($Having));
if($EditFilterLength>0) $Where.="and(R.Number like '%{$EditFilter}%')";
$sql
=
"select R.Id,R.Number,R.Page1 PageCount,".
"ifnull(R.AzonId,0)>0 HaveAzonId,".
"ifnull((select sum(A.`Agreement`<>1) from rpt_authors A where A.`ReportId`=R.`Id`),-1)=0 HaveAgrements,".
"ifnull((select sum((ifnull(L.AffilationId,0)>0)and(ifnull(U.`AzonId`,0)>0)) from rpt_authors A, rpt_aliases L, rpt_users U where A.`ReportId`=R.`Id` and L.`Id`=A.`AliasId` and U.`Id`=L.`UserId`),-1)>0 HaveAuthorsId,".
"ifnull((select count(K.`Id`)>0 from `rpt_report_keypack` P, `rpt_keymono` K where P.`ReportId`=R.`Id` and K.`KeyPackId`=P.`KeyPackId`),0) HaveKeywords,".
"ifnull(R.DomainId,0)>0 HaveDomain,".
"ifnull(length(R.Abstract),-1)>0 HaveAbstract ".
"from rpt_reports R ".
"where (R.Project=1)$Where$Having ".
"order by R.Number"
;
Działa dobrze.