Browse Source

Acl update table proces init list to use idx_PROCES_WITH_GROUPS_ID (goto and return)

Piotr Labudda 10 years ago
parent
commit
123ca37182
1 changed files with 61 additions and 5 deletions
  1. 61 5
      SE/se-lib/UserAcl.php

+ 61 - 5
SE/se-lib/UserAcl.php

@@ -521,13 +521,69 @@ SQL;
 				where tpv.`ID_TABLE`='{$idTable}'
 SQL;
 		$fetchTableProcesInitListSql = <<<SQL
+			-- time ~0.07 -- no goto and return
 			select p.`ID`, p.`DESC`
-				from `CRM_PROCES_idx` i
-					join `CRM_PROCES` p on(p.`ID`=i.`idx_PROCES_INIT_ID`)
-				where i.`ID_PROCES` in({$sqlIdProcesListSql})
-				group by p.`ID`
-				order by p.`SORT_PRIO`
+			from `CRM_PROCES` p
+			where p.`ID` in(
+						select i.`idx_PROCES_INIT_ID`
+						from `CRM_PROCES_idx` i
+						where i.`ID_PROCES` in({$sqlIdProcesListSql})
+				)
+				and p.`TYPE`='PROCES_INIT'
+			order by p.`SORT_PRIO`
+SQL;
+		/*
+			SELECT p.`ID` , p.`DESC`
+			FROM  `CRM_PROCES` p
+			WHERE p.`ID`
+			IN (
+					SELECT i.`idx_PROCES_INIT_ID`
+					FROM  `CRM_PROCES_idx` i
+					WHERE i.`ID_PROCES`
+					IN (
+							SELECT tpv.`ID_PROCES`
+							FROM  `CRM_PROCES_idx_TABLE_TO_PROCES_VIEW` tpv
+							WHERE tpv.`ID_TABLE` =  '13051'
+					)
+			)
+			AND p.`TYPE` =  'PROCES_INIT'
+			order by p.`SORT_PRIO`
+		*/
+		$fetchTableProcesInitListSql = <<<SQL
+			-- time ~0.15s
+			select p.`ID`, p.`DESC`
+			from `CRM_PROCES` p
+			where p.`ID` in(
+						select i.`idx_PROCES_INIT_ID`
+						from `CRM_PROCES_idx` i
+						where i.`ID_PROCES` in({$sqlIdProcesListSql})
+					union
+						select ig.`idx_PROCES_INIT_ID`
+						from `CRM_PROCES_idx` i
+							join `CRM_PROCES_idx` ig on(ig.`ID_PROCES`=i.`idx_PROCES_WITH_GROUPS_ID`)
+						where i.`ID_PROCES` in({$sqlIdProcesListSql})
+				)
+				and p.`TYPE`='PROCES_INIT'
+			order by p.`SORT_PRIO`
+SQL;
+		$fetchTableProcesInitListSql = <<<SQL
+			-- time ~0.14
+			select p.`ID`, p.`DESC`
+			from `CRM_PROCES` p
+			where p.`ID` in(
+					select i.`idx_PROCES_INIT_ID`
+					from `CRM_PROCES_idx` i
+					where i.`ID_PROCES` in({$sqlIdProcesListSql})
+						or i.`ID_PROCES` in(
+							select ig.`idx_PROCES_WITH_GROUPS_ID`
+							from `CRM_PROCES_idx` ig
+							where ig.`ID_PROCES` in({$sqlIdProcesListSql})
+						)
+				)
+				and p.`TYPE`='PROCES_INIT'
+			order by p.`SORT_PRIO`
 SQL;
+		//echo'<pre>$fetchTableProcesInitListSql('.$idTable.') ';print_r($fetchTableProcesInitListSql);echo'</pre>';
 		$tableProcesInitList = array();
 		$db = DB::getDB();
 		$res = $db->query($fetchTableProcesInitListSql);