function DB_Select($TablesIDs, $ColumnsIDs = '*', $Query = array()) { /****************************************************************************/ $__args_types = array('string,array', 'string,array', 'array', 'boolean'); #----------------------------------------------------------------------------- $__args__ = Func_Get_Args(); eval(FUNCTION_INIT); /****************************************************************************/ if (!$TablesIDs) { return ERROR | @Trigger_Error('[DB_Select]: имена таблиц не указаны'); } #----------------------------------------------------------------------------- $Default = array('GroupBy' => '', 'SortOn' => '', 'IsDesc' => FALSE, 'Limits' => array()); #----------------------------------------------------------------------------- Array_Union($Default, $Query); #----------------------------------------------------------------------------- $Query = $Default; #----------------------------------------------------------------------------- if (!Is_Array($TablesIDs)) { $TablesIDs = array($TablesIDs); } #----------------------------------------------------------------------------- $Array = array(); #----------------------------------------------------------------------------- foreach ($TablesIDs as $TableID) { $Array[] = Preg_Match('/^[a-zA-Z]+$/u', $TableID) ? SPrintF('`%s`', $TableID) : $TableID; } #----------------------------------------------------------------------------- $TablesIDs = $Array; #----------------------------------------------------------------------------- if (!Is_Array($ColumnsIDs)) { $ColumnsIDs = array($ColumnsIDs); } #----------------------------------------------------------------------------- $Array = array(); #----------------------------------------------------------------------------- foreach ($ColumnsIDs as $ColumnID) { $Array[] = Preg_Match('/^[a-zA-Z]+$/u', $ColumnID) ? SPrintF('`%s`', $ColumnID) : $ColumnID; } #----------------------------------------------------------------------------- $ColumnsIDs = $Array; #----------------------------------------------------------------------------- $Sql = SPrintF('SELECT %s FROM %s', Implode(',', $ColumnsIDs), Implode(',', $TablesIDs)); #----------------------------------------------------------------------------- if ($Where = DB_Where($Query)) { $Sql = SPrintF('%s WHERE %s', $Sql, $Where); } #----------------------------------------------------------------------------- $GroupBy = $Query['GroupBy']; #----------------------------------------------------------------------------- if ($GroupBy) { #--------------------------------------------------------------------------- if (!Is_Array($GroupBy)) { $GroupBy = array($GroupBy); } #--------------------------------------------------------------------------- $Array = array(); #--------------------------------------------------------------------------- foreach ($GroupBy as $ColumnID) { $Array[] = SPrintF('`%s`', $ColumnID); } #--------------------------------------------------------------------------- $GroupBy = $Array; #--------------------------------------------------------------------------- $Sql = SPrintF('%s GROUP BY %s', $Sql, Implode(',', $GroupBy)); } #----------------------------------------------------------------------------- $SortOn = $Query['SortOn']; #----------------------------------------------------------------------------- if ($SortOn) { #--------------------------------------------------------------------------- if (!Is_Array($SortOn)) { $SortOn = array($SortOn); } #--------------------------------------------------------------------------- $Array = array(); #--------------------------------------------------------------------------- foreach ($SortOn as $ColumnID) { #------------------------------------------------------------------------- $ColumnID = DB_Escape($ColumnID); #------------------------------------------------------------------------- #$Array[] = StrPos($ColumnID,'.')?$ColumnID:SPrintF('`%s`',$ColumnID); # если в названии встречается точка или запятая - не ставим кавычки... $Array[] = StrpBrk($ColumnID, '.,') ? $ColumnID : SPrintF('`%s`', $ColumnID); #Debug(SPrintF('[system/libs/auto/DB]: SortOn = %s',$ColumnID)); #$Array[] = $ColumnID; } #--------------------------------------------------------------------------- $Sql = SPrintF('%s ORDER BY %s', $Sql, Implode(',', $Array)); } #----------------------------------------------------------------------------- if ($Query['IsDesc']) { $Sql = SPrintF('%s DESC', $Sql); } #----------------------------------------------------------------------------- $Limits = $Query['Limits']; if (Count($Limits) > 1) { $Sql = SPrintF('%s LIMIT %s, %s', $Sql, Current($Limits), Next($Limits)); } #----------------------------------------------------------------------------- $CacheID = SPrintF('[DB_Select]:%s', Md5($Sql)); #----------------------------------------------------------------------------- if (!($Rows = Cache_Get($CacheID))) { #--------------------------------------------------------------------------- $Result = DB_Query($Sql); #--------------------------------------------------------------------------- switch (ValueOf($Result)) { case 'error': return ERROR | @Trigger_Error('[DB_Select]: невозможно осуществить запрос'); case 'resource': #----------------------------------------------------------------------- $Rows = MySQL::Result($Result); #----------------------------------------------------------------------- if (Count($Rows) < 1) { return new gException('ROWS_NOT_FOUND', 'Записи не найдены'); } #----------------------------------------------------------------------- $NoTypesDB = Link_Get('NoTypesDB', 'boolean'); #----------------------------------------------------------------------- if (!$NoTypesDB) { #--------------------------------------------------------------------- for ($i = 0; $i < Count($Rows); $i++) { #------------------------------------------------------------------- $Row =& $Rows[$i]; #------------------------------------------------------------------- $Row = DB_Types($Row, 'Explode'); if (Is_Error($Row)) { return ERROR | @Trigger_Error('[DB_Select]: не удалось произвести преобразование типов'); } } } #----------------------------------------------------------------------- Cache_Add($CacheID, $Rows); break; default: return ERROR | @Trigger_Error(101); } } #----------------------------------------------------------------------------- if (In_Array('UNIQ', $Query, TRUE)) { #--------------------------------------------------------------------------- if (Count($Rows) > 1) { return ERROR | @Trigger_Error('[DB_Select]: запись не является уникальной'); } #--------------------------------------------------------------------------- $Rows = Current($Rows); } #----------------------------------------------------------------------------- return $Rows; }
/******************************************************************************/ $__args_list = array('LinkID'); /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ eval(COMP_INIT); /******************************************************************************/ /******************************************************************************/ $Links =& Links(); # Коллекция ссылок $Template =& $Links[$LinkID]; /******************************************************************************/ /******************************************************************************/ $CacheID = 'TableSuper[Indexes]'; #------------------------------------------------------------------------------- if (!($NoBody = Cache_Get($CacheID))) { #----------------------------------------------------------------------------- $Count = $Template['Source']['Count']; #----------------------------------------------------------------------------- if ($Count < 1) { return FALSE; } #----------------------------------------------------------------------------- $Div = new Tag('DIV', array('class' => 'TableSuperNavigation')); #----------------------------------------------------------------------------- $Options = array(); #----------------------------------------------------------------------------- for ($i = 5; $i < 100; $i *= 2) { $Options[$i] = $i; } #-----------------------------------------------------------------------------