mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-26 18:03:39 +01:00
added function to abstract SQL union statement, needed to speed up the calendar search for MySQL 5
This commit is contained in:
parent
23ea4159ef
commit
3a8c25df86
@ -1537,7 +1537,7 @@
|
||||
*/
|
||||
function select($table,$cols,$where,$line,$file,$offset=False,$append='',$app=False,$num_rows=0,$join='',$table_def=False)
|
||||
{
|
||||
if ($this->Debug) echo "<p>db::select('$table',".print_r($cols,True).",".print_r($where,True).",$line,$file,$offset,'$app')</p>\n";
|
||||
if ($this->Debug) echo "<p>db::select('$table',".print_r($cols,True).",".print_r($where,True).",$line,$file,$offset,'$app',$num_rows,'$join')</p>\n";
|
||||
|
||||
if (!$table_def) $table_def = $this->get_table_definitions($app,$table);
|
||||
if (is_array($cols))
|
||||
@ -1557,6 +1557,54 @@
|
||||
|
||||
if ($this->Debug) echo "<p>sql='$sql'</p>";
|
||||
|
||||
if ($line === false && $file === false) // call by union, to return the sql rather then run the query
|
||||
{
|
||||
return $sql;
|
||||
}
|
||||
return $this->query($sql,$line,$file,$offset,$offset===False ? -1 : (int)$num_rows);
|
||||
}
|
||||
|
||||
/**
|
||||
* Does a union over multiple selects
|
||||
*
|
||||
* @author RalfBecker<at>outdoor-training.de
|
||||
*
|
||||
* @param array $selects array of selects, each select is an array with the possible keys/parameters: table, cols, where, append, app, join, table_def
|
||||
* For further info about parameters see the definition of the select function, beside table, cols and where all other params are optional
|
||||
* @param int $line line-number to pass to query
|
||||
* @param string $file file-name to pass to query
|
||||
* @param string $order_by ORDER BY statement for the union
|
||||
* @param int/bool $offset offset for a limited query or False (default)
|
||||
* @param int $num_rows number of rows to return if offset set, default 0 = use default in user prefs
|
||||
* @return ADORecordSet or false, if the query fails
|
||||
*/
|
||||
function union($selects,$line,$file,$order_by='',$offset=false,$num_rows=0)
|
||||
{
|
||||
if ($this->Debug) echo "<p>db::union(".print_r($selects,True).",$line,$file,$order_by,$offset,$num_rows)</p>\n";
|
||||
|
||||
$sql = array();
|
||||
foreach($selects as $select)
|
||||
{
|
||||
$sql[] = call_user_func_array(array($this,'select'),array(
|
||||
$select['table'],
|
||||
$select['cols'],
|
||||
$select['where'],
|
||||
false, // line
|
||||
false, // file
|
||||
false, // offset
|
||||
$select['append'],
|
||||
$select['app'],
|
||||
0, // num_rows,
|
||||
$select['join'],
|
||||
$select['table_def'],
|
||||
));
|
||||
}
|
||||
$sql = count($sql) > 1 ? '(' . implode(")\nUNION\n(",$sql).')' : $sql[0];
|
||||
|
||||
if ($order_by) $sql .= "\nORDER BY ".$order_by;
|
||||
|
||||
if ($this->Debug) echo "<p>sql='$sql'</p>";
|
||||
|
||||
return $this->query($sql,$line,$file,$offset,$offset===False ? -1 : (int)$num_rows);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user