MDL-44725 dml: added sql_intersect()

This commit is contained in:
Marina Glancy
2014-09-03 13:33:58 +08:00
parent 5a249b20c4
commit 3b4db5bdf5
5 changed files with 147 additions and 11 deletions
+10 -10
View File
@@ -351,6 +351,7 @@ class tree extends tree_node {
}
public function get_user_list_sql($not, info $info, $onlyactive) {
global $DB;
// Get logic flags from operator.
list($innernot, $andoperator) = $this->get_logic_flags($not);
@@ -381,17 +382,16 @@ class tree extends tree_node {
// Combine results using INTERSECT or UNION.
$outsql = null;
$outparams = null;
$subsql = array();
$outparams = array();
foreach ($childresults as $childresult) {
if (!$outsql) {
$outsql = '(' . $childresult[0] . ')';
$outparams = $childresult[1];
} else {
$outsql .= $andoperator ? ' INTERSECT (' : ' UNION (';
$outsql .= $childresult[0];
$outsql .= ')';
$outparams = array_merge($outparams, $childresult[1]);
}
$subsql[] = $childresult[0];
$outparams = array_merge($outparams, $childresult[1]);
}
if ($andoperator) {
$outsql = $DB->sql_intersect($subsql, 'id');
} else {
$outsql = '(' . join(') UNION (', $subsql) . ')';
}
return array($outsql, $outparams);
}