public static function setOption($optionName, $optionValue) { $optionName = strtoupper($optionName); if (!isset(static::$arOptions[$optionName])) { $arInsert = array('NAME' => $optionName, 'VALUE' => $optionValue); $result = Tables\OptionsTable::getList(array("filter" => array("NAME" => $optionName))); if ($result) { $query = new Query('update'); $query->setUpdateParams($arInsert, $result[0]['ID'], Tables\OptionsTable::getTableName(), Tables\OptionsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { static::$arOptions[$optionName] = $optionValue; return true; } else { return false; } } else { $query = new Query('insert'); $query->setInsertParams($arInsert, Tables\OptionsTable::getTableName(), Tables\OptionsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { static::$arOptions[$optionName] = $optionValue; return true; } else { return false; } } } else { return true; } }
public static function addNewRate($tariffID, $value = 0, $date = null) { if (is_null($date)) { $date = date('d.m.Y'); } $query = new Query('insert'); $query->setInsertParams(array('TARIFF_ID' => $tariffID, 'DATE' => $date, 'VALUE' => $value), RatesTable::getTableName(), RatesTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { self::updateData($date); return $res->getInsertId(); } else { return false; } }
/** * Функция получает с курсы валют по отношению к базовой на указанную дату или на сегодня * * @param string $baseCur Базовая валюта * @param array $arRateCur Массив валют курсов * @param string $date Дата * * @return bool */ public static function getRates($baseCur = null, $arRateCur = null, $date = null) { try { if (is_null($baseCur)) { throw new Exception\ArgumentNullException('$baseCur'); } if (is_null($arRateCur)) { throw new Exception\ArgumentNullException('$arRateCur'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } if (is_null($date)) { $date = date("d.m.Y"); } $baseCur = strtoupper($baseCur); if (!is_array($arRateCur)) { $arRateCur = array(strtoupper($arRateCur)); } else { foreach ($arRateCur as &$rate) { $rate = strtoupper($rate); } } $arInsert = array(); $i = 0; if ($baseCur == "RUB") { //Если базовой валютой является рубль, загружаем данные с CBR.Ru (Сбербанк России) $date_cbr = str_replace('.', '/', $date); $path = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req=' . $date_cbr; $rates = simplexml_load_file($path); foreach ($rates->Valute as $val) { if (in_array(strval($val->CharCode), $arRateCur)) { $res = Tables\RatesTable::getList(array("filter" => array("DATE" => $date, "CURRENCY_CURRENT" => strval($val->CharCode), "CURRENCY_BASE" => $baseCur))); if (!$res) { $arInsert[$i] = array('DATE' => $date, 'CURRENCY_CURRENT' => strval($val->CharCode), 'CURRENCY_BASE' => $baseCur, 'RATE' => floatval(str_replace(",", ".", $val->Value))); $i++; } } } if (!empty($arInsert)) { $query = new Query("insert"); $query->setInsertParams($arInsert, Tables\RatesTable::getTableName(), Tables\RatesTable::getMapArray()); $res = $query->exec(); } } }
public static function addCounter($code, $name = '') { $arRes = CountersTable::getList(array('select' => array('ID'), 'filter' => array('CODE' => $code))); if ($arRes) { //Если счетчик с таким кодом уже есть, не добавляем ничего return false; } else { //Если счетчика с таким кодом еще нет, добавляем новый $query = new Query('insert'); $query->setInsertParams(array('CODE' => $code, 'NAME' => $name), CountersTable::getTableName(), CountersTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } }
public static function addTariff($code, $counterID, $startValue = 0) { $arRes = TariffsTable::getList(array('select' => array('ID'), 'filter' => array('CODE' => $code))); if ($arRes) { //Если тариф с таким кодом уже существует, ничего не добаляем return false; } else { //Если не существует, добавляем $query = new Query('insert'); $query->setInsertParams(array('CODE' => $code, 'COUNTER_ID' => $counterID, 'START_VALUE' => $startValue), TariffsTable::getTableName(), TariffsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } }
public static function addNewModel($brandID = null, $modelName = null) { try { if (is_null($modelName)) { throw new ArgumentNullException('model_name'); } else { $modelName = htmlspecialchars($modelName); } if (is_null($brandID)) { throw new ArgumentNullException('brandID'); } $arInsert[0] = array('BRANDS_ID' => $brandID, 'NAME' => $modelName); $query = new Query('insert'); $query->setInsertParams($arInsert, CarModelTable::getTableName(), CarModelTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } } catch (ArgumentNullException $e) { $e->showException(); } }
public static function deleteTs($tsID = null) { try { if (is_null($tsID)) { throw new Exception\ArgumentNullException('tsID'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } $query = new Query('delete'); $query->setDeleteParams($tsID, null, Tables\TsTable::getTableName(), Tables\TsTable::getMapArray(), Tables\TsTable::getTableLinks()); $res = $query->exec(); if ($res->getResult()) { return true; } else { return false; } }
/** * Добавляет новое событие в DB * * @param array $arPost * * @return bool|int */ protected static function addEventFromPostToDB($arPost = null) { try { if (is_null($arPost)) { throw new Exception\ArgumentNullException('$arPost'); } elseif (!is_array($arPost)) { throw new Exception\ArgumentTypeException('$arPost', 'array'); } } catch (Exception\ArgumentNullException $e1) { $e1->showException(); return false; } catch (Exception\ArgumentTypeException $e2) { $e2->showException(); } $query = new Query('insert'); $query->setInsertParams($arPost, Tables\EventsTable::getTableName(), Tables\EventsTable::getMapArray()); $res = $query->exec(); if ($res->getInsertId() > 0) { return $res->getInsertId(); } else { return false; } }
protected static function addRepairParts($arAdd = null) { try { if (is_null($arAdd)) { throw new Exception\ArgumentNullException('arAdd'); } elseif (!is_array($arAdd)) { throw new Exception\ArgumentTypeException('arAdd', 'array'); } } catch (Exception\ArgumentNullException $e) { die($e->showException()); } catch (Exception\ArgumentTypeException $e2) { die($e2->showException()); } //msDebug($arAdd); $query = new Query('insert'); $query->setInsertParams($arAdd, Tables\RepairPartsTable::getTableName(), Tables\RepairPartsTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { static::$arError['ADD'] = 'Ошибка добавления данных'; return false; } }
private static function getValues($tariffID, $date = null, $type = 'hourly') { if (is_null($date)) { $arDate = explode('.', date('d.m.Y')); } else { if ($date = DateHelper::validateDate($date)) { $arDate = explode('.', $date); } else { $arDate = explode('.', date('d.m.Y')); } } $query = new Query('select'); $sqlHelper = new SqlHelper(); $valuesHourlyTableName = ValuesHourlyTable::getTableName(); $sql = "SELECT " . $sqlHelper->getSumFunction("VALUE") . " , " . $sqlHelper->getSumFunction("COST"); if ($type == 'hourly') { $sql .= " , " . $sqlHelper->wrapQuotes("HOUR"); } if ($type == 'hourly' || $type == 'daily') { $sql .= " , " . $sqlHelper->wrapQuotes("DAY"); } if ($type == 'hourly' || $type == 'daily' || $type == 'monthly') { $sql .= " , " . $sqlHelper->wrapQuotes("MONTH"); } $sql .= " , " . $sqlHelper->wrapQuotes("YEAR"); $sql .= " FROM " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . " WHERE " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("TARIFF_ID") . " =" . intval($tariffID); if ($type == 'hourly') { $sql .= " AND " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("DAY") . " =" . intval($arDate[0]); } if ($type == 'hourly' || $type == 'daily') { $sql .= " AND " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("MONTH") . " =" . intval($arDate[1]); } if ($type == 'hourly' || $type == 'daily' || $type == 'monthly') { $sql .= " AND " . $sqlHelper->wrapQuotes($valuesHourlyTableName) . "." . $sqlHelper->wrapQuotes("YEAR") . " =" . intval($arDate[2]); } if ($type == 'hourly') { $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("HOUR") . " "; } elseif ($type == 'daily') { $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("DAY") . " "; } elseif ($type == 'monthly') { $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("MONTH") . " "; } elseif ($type == 'yearly') { $sql .= " GROUP BY " . $sqlHelper->wrapQuotes("YEAR") . " "; } $query->setQueryBuildParts($sql); $res = $query->exec(); if ($res->getResult()) { $arResult = array(); $i = 0; while ($ar_res = $res->fetch()) { $arResult[$i] = array('SUM_VALUE' => round($ar_res['SUM_VALUE'], 2), 'SUM_COST' => round($ar_res['SUM_COST'], 2), 'YEAR' => intval($ar_res['YEAR'])); if (isset($ar_res['HOUR'])) { $arResult[$i]['HOUR'] = intval($ar_res['HOUR']); } if (isset($ar_res['DAY'])) { $arResult[$i]['DAY'] = intval($ar_res['DAY']); } if (isset($ar_res['MONTH'])) { $arResult[$i]['MONTH'] = intval($ar_res['MONTH']); } $i++; } return $arResult; } else { return false; } }
protected static function parseSunRiseSet($city, $arWeather) { $dateHelper = new DateHelper(); list($sunRiseDate, $sunRiseTime) = explode('T', $arWeather['sun']['@attributes']['rise']); $sunRiseDate = $dateHelper->convertDateFromDB($sunRiseDate); $sunRiseTime = explode(':', $sunRiseTime); $sunRiseTime[0] += $city['UTC_HOUR']; if ($sunRiseTime[0] > 23) { $sunRiseTime[0] -= 24; $sunRiseDate = $dateHelper->strToTime($sunRiseDate); } list($sunSetDate, $sunSetTime) = explode('T', $arWeather['sun']['@attributes']['set']); $sunSetDate = $dateHelper->convertDateFromDB($sunSetDate); $sunSetTime = explode(':', $sunSetTime); $sunSetTime[0] += $city['UTC_HOUR']; if ($sunSetTime[0] > 23) { $sunSetTime[0] -= 24; $sunSetDate = $dateHelper->strToTime($sunSetDate); } $sunRiseMin = $sunRiseTime[0] * 60 + $sunRiseTime[1]; $sunSetMin = $sunSetTime[0] * 60 + $sunSetTime[1]; if ($sunSetMin >= $sunRiseMin) { $sunDayMin = $sunSetMin - $sunRiseMin; } else { $sunDayMin = $sunSetMin + 24 * 60 - $sunRiseMin; } $sunDayHour = floor($sunDayMin / 60); $sunDayMin -= $sunDayHour * 60; $arSunRise = SunTable::getList(array('filter' => array('CITY_ID' => $city['ID'], 'DATE' => $sunRiseDate))); $arInsertUpdate = array('CITY_ID' => $city['ID'], 'DATE' => $sunRiseDate, 'SUNRISE' => $sunRiseTime[0] . ':' . $sunRiseTime[1] . ':' . $sunRiseTime[2], 'SUNSET' => $sunSetTime[0] . ':' . $sunSetTime[1] . ':' . $sunSetTime[2], 'DAYTIME' => $sunDayHour . ':' . $sunDayMin . ':00'); if ($arSunRise) { //Update $query = new Query('update'); $query->setUpdateParams($arInsertUpdate, $arSunRise[0]['ID'], SunTable::getTableName(), SunTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getInsertId(); } else { return false; } } else { //Insert $query = new Query('insert'); $query->setInsertParams($arInsertUpdate, SunTable::getTableName(), SunTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return $res->getAffectedRows(); } else { return false; } } }
/** * Возвращает массив данных обо всех автомобилях * * @param bool $bActive * * @return array */ public static function getListCar($bActive = true) { $helper = new SqlHelper(); $sql = "SELECT\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('ID') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ACTIVE') . " AS " . $helper->wrapQuotes('ACTIVE') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('SORT') . " AS " . $helper->wrapQuotes('SORT') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('NAME') . ",\n\t"; $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('BRAND_ID') . ",\n\t"; $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('BRAND_NAME') . ",\n\t"; $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('BRAND_CODE') . ",\n\t"; $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('MODEL_ID') . ",\n\t"; $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('MODEL_NAME') . ",\n\t"; $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('BRANDS_ID') . " AS " . $helper->wrapQuotes('MODEL_BRANDS_ID') . ",\n\t"; $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('MODEL_CODE') . ",\n\t"; $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('GEARBOX_ID') . ",\n\t"; $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('GEARBOX_NAME') . ",\n\t"; $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('GEARBOX_CODE') . ",\n\t"; $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('ID') . " AS " . $helper->wrapQuotes('BODY_ID') . ",\n\t"; $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('NAME') . " AS " . $helper->wrapQuotes('BODY_NAME') . ",\n\t"; $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('CODE') . " AS " . $helper->wrapQuotes('BODY_CODE') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('YEAR') . " AS " . $helper->wrapQuotes('YEAR') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('VIN') . " AS " . $helper->wrapQuotes('VIN') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_NUMBER') . " AS " . $helper->wrapQuotes('CAR_NUMBER') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ENGINE_CAPACITY') . " AS " . $helper->wrapQuotes('ENGINE_CAPACITY') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('INTERVAL_TS') . " AS " . $helper->wrapQuotes('INTERVAL_TS') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('COST') . " AS " . $helper->wrapQuotes('COST') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('MILEAGE') . " AS " . $helper->wrapQuotes('MILEAGE') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CREDIT') . " AS " . $helper->wrapQuotes('CREDIT') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CREDIT_COST') . " AS " . $helper->wrapQuotes('CREDIT_COST') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('DATE_OSAGO_END') . " AS " . $helper->wrapQuotes('DATE_OSAGO_END') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('DATE_GTO_END') . " AS " . $helper->wrapQuotes('DATE_GTO_END') . ",\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('DEFAULT') . " AS " . $helper->wrapQuotes('DEFAULT') . "\n"; $sql .= "FROM\n\t"; $sql .= $helper->wrapQuotes('ms_icar_my_car') . " AS " . $helper->wrapQuotes('car') . " ,\n\t"; $sql .= $helper->wrapQuotes('ms_icar_car_brand') . " AS " . $helper->wrapQuotes('brand') . " ,\n\t"; $sql .= $helper->wrapQuotes('ms_icar_car_model') . " AS " . $helper->wrapQuotes('model') . " ,\n\t"; $sql .= $helper->wrapQuotes('ms_icar_car_gearbox') . " AS " . $helper->wrapQuotes('gear') . " ,\n\t"; $sql .= $helper->wrapQuotes('ms_icar_car_body') . " AS " . $helper->wrapQuotes('body') . "\n"; $sql .= "WHERE\n\t"; if ($bActive) { $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('ACTIVE') . " = 'Y' AND\n\t"; } $sql .= $helper->wrapQuotes('brand') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_BRANDS_ID') . " AND\n\t"; $sql .= $helper->wrapQuotes('model') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_MODEL_ID') . " AND\n\t"; $sql .= $helper->wrapQuotes('gear') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_GEARBOX_ID') . " AND\n\t"; $sql .= $helper->wrapQuotes('body') . "." . $helper->wrapQuotes('ID') . " = " . $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('CAR_BODY_ID') . "\n"; $sql .= "ORDER BY\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('SORT') . " ASC,\n\t"; $sql .= $helper->wrapQuotes('car') . "." . $helper->wrapQuotes('NAME') . " ASC"; $query = new Query('select'); $query->setQueryBuildParts($sql); $res = $query->exec(); $arResult = array(); $i = 0; while ($ar_res = $res->fetch()) { foreach ($ar_res as $key => $value) { if (!is_numeric($key)) { $arResult[$i][$key] = $value; } } $i++; } $arResult = static::fetchCarData($arResult); return $arResult; }
public static function checkTable() { /* ОСНОВНЫЕ ПРАВИЛА ХРАНЕНИЯ ДЕРЕВА КАТАЛОГОВ * * 1. Левый ключ ВСЕГДА меньше правого; * 2. Наименьший левый ключ ВСЕГДА равен 1; * 3. Наибольший правый ключ ВСЕГДА равен двойному числу узлов; * 4. Разница между правым и левым ключом ВСЕГДА нечетное число; * 5. Если уровень узла нечетное число то тогда левый ключ ВСЕГДА нечетное число, то же самое и для четных чисел; * 6. Ключи ВСЕГДА уникальны, вне зависимости от того правый он или левый; */ $bError = false; //$className = static::getClassName(); //TODO: Невозможно сравнивать с полем. Нужно доделать, чтобы можно было. См. коммент ниже /* $res1 = $className::getList(array( 'select' => array('ID'), 'filter' => array('LEFT_MARGIN'=>'RIGHT_MARGIN') )); */ $helper = new SqlHelper(); //1. Левый ключ ВСЕГДА меньше правого; //Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк; $sql1 = "SELECT " . $helper->wrapQuotes('ID') . " FROM " . $helper->wrapQuotes(static::getTableName()) . " WHERE " . $helper->wrapQuotes('LEFT_MARGIN') . " >= " . $helper->wrapQuotes('RIGHT_MARGIN'); $query1 = new Query('select'); $query1->setQueryBuildParts($sql1); $res1 = $query1->exec(); if ($res1->getResult()) { while ($ar_res1 = $res1->fetch()) { $arResult['RULE1'][] = $ar_res1; } $bError = true; } //2. Наименьший левый ключ ВСЕГДА равен 1; //3. Наибольший правый ключ ВСЕГДА равен двойному числу узлов; //Получаем количество записей (узлов), минимальный левый ключ и максимальный правый ключ, проверяем значения. $sql2 = "SELECT COUNT(" . $helper->wrapQuotes('ID') . ") as COUNT, MIN(" . $helper->wrapQuotes('LEFT_MARGIN') . ") as MIN, MAX(" . $helper->wrapQuotes('RIGHT_MARGIN') . ") as MAX FROM " . $helper->wrapQuotes(static::getTableName()); $query2 = new Query('select'); $query2->setQueryBuildParts($sql2); $res2 = $query2->exec(); if ($ar_res2 = $res2->fetch()) { if ($ar_res2['MIN'] != 1) { $bError = true; $arResult['RULE2']['MIN'] = $ar_res2['MIN']; } $double = $ar_res2['COUNT'] * 2; if ($ar_res2['MAX'] != $double) { $bError = true; $arResult['RULE3']['COUNT'] = $ar_res2['COUNT']; $arResult['RULE3']['DOUBLE'] = $double; $arResult['RULE3']['MAX'] = $ar_res2['MAX']; } } else { $bError = true; $arResult['RULE2'] = false; $arResult['RULE3'] = false; } //4. Разница между правым и левым ключом ВСЕГДА нечетное число; //Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк; $sql4 = "SELECT " . $helper->wrapQuotes('ID') . ", MOD((" . $helper->wrapQuotes('RIGHT_MARGIN') . " - " . $helper->wrapQuotes('LEFT_MARGIN') . ") / 2) AS REMAINDER FROM " . $helper->wrapQuotes(static::getTableName()) . " WHERE REMAINDER = 0"; $query4 = new Query('select'); $query4->setQueryBuildParts($sql4); $res4 = $query4->exec(); if ($res4->getResult()) { $bError = true; while ($ar_res4 = $res4->fetch()) { $arResult['RULE4'][] = $ar_res4; } } //5. Если уровень узла нечетное число то тогда левый ключ ВСЕГДА нечетное число, то же самое и для четных чисел; //Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк; $sql5 = "SELECT " . $helper->wrapQuotes('ID') . ", MOD((" . $helper->wrapQuotes('LEFT_MARGIN') . " – " . $helper->wrapQuotes('DEPTH_LEVEL') . " + 2) / 2) AS REMAINDER FROM " . $helper->wrapQuotes(static::getTableName()) . " WHERE REMAINDER = 1"; $query5 = new Query('select'); $query5->setQueryBuildParts($sql5); $res5 = $query5->exec(); if ($res5->getResult()) { $bError = true; while ($ar_res5 = $res5->fetch()) { $arResult['RULE5'][] = $ar_res5; } } //6. Ключи ВСЕГДА уникальны, вне зависимости от того правый он или левый; /* Здесь, я думаю, потребуется некоторое пояснение запроса. Выборка по сути осуществляется из одной таблицы, но в разделе FROM эта таблица "виртуально" продублирована 3 раза: из первой мы выбираем все записи по порядку и начинаем сравнивать с записями второй таблицы (раздел WHERE) в результате мы получаем все записи неповторяющихся значений. Для того, что бы определить сколько раз запись не повторялась в таблице, производим группировку (раздел GROUP BY) и получаем число "не повторов" (COUNT(t1.id)). По условию, если все ключи уникальны, то число не повторов будет меньше на одну единицу чем общее количество записей. Для того, чтобы определить количество записей в таблице, берем максимальный правый ключ (MAX(t3.right_key)), так как его значение - двойное число записей, но так как в условии отбора для записи с максимальным правым ключом - максимальный правый ключ будет другим, вводится третья таблица, при этом число "неповторов" увеличивается умножением его на количество записей. SQRT(4*rep +1) - решение уравнения x^2 + x = rep. Если все правильно то результата работы запроса не будет, иначе, получаем список идентификаторов неправильных строк; */ $sql6 = "SELECT t1." . $helper->wrapQuotes('ID') . ", COUNT(t1." . $helper->wrapQuotes('ID') . ") AS rep, MAX(t3." . $helper->wrapQuotes('RIGHT_MARGIN') . ") AS max_right FROM " . $helper->wrapQuotes(static::getTableName()) . " AS t1, " . $helper->wrapQuotes(static::getTableName()) . " AS t2, " . $helper->wrapQuotes(static::getTableName()) . " AS t3 WHERE t1." . $helper->wrapQuotes('LEFT_MARGIN') . " <> t2." . $helper->wrapQuotes('LEFT_MARGIN') . " AND t1." . $helper->wrapQuotes('LEFT_MARGIN') . " <> t2." . $helper->wrapQuotes('RIGHT_MARGIN') . " AND t1." . $helper->wrapQuotes('RIGHT_MARGIN') . " <> t2." . $helper->wrapQuotes('LEFT_MARGIN') . " AND t1." . $helper->wrapQuotes('RIGHT_MARGIN') . " <> t2." . $helper->wrapQuotes('RIGHT_MARGIN') . " GROUP BY t1." . $helper->wrapQuotes('ID') . " HAVING max_right <> SQRT(4 * rep + 1) + 1"; $query6 = new Query('select'); $query6->setQueryBuildParts($sql6); $res6 = $query6->exec(); if ($res6->getResult()) { $bError = true; while ($ar_res6 = $res6->fetch()) { $arResult['RULE6'][] = $ar_res6; } } if ($bError) { return $arResult; } else { return false; } }
/** * Обновляет значение расхода для указанной записи * * @param int $primary * @param array $arUpdate * * @return bool */ protected static function updateExpence($primary = null, $arUpdate = null) { try { if (is_null($primary)) { throw new Exception\ArgumentNullException('primary'); } if (is_null($arUpdate)) { throw new Exception\ArgumentNullException('arUpdate'); } elseif (!is_array($arUpdate)) { throw new Exception\ArgumentTypeException('arUpdate', 'array'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } catch (Exception\ArgumentTypeException $e2) { $e2->showException(); return false; } $query = new Query('update'); $query->setUpdateParams($arUpdate, $primary, Tables\FuelTable::getTableName(), Tables\FuelTable::getMapArray()); $res = $query->exec(); if ($res->getResult()) { return true; } else { return false; } }
/** * Функция высчитывает данные о пройденном расстоянии от выбранной даты или за все время * * @param int $carID * @param string $date */ protected static function updateDayOdometer($carID = null, $date = null) { $dateHelper = new DateHelper(); $arResult = array(); if (is_null($carID)) { $carID = MyCar::getDefaultCarID(); } if (is_null($date)) { //TODO: Проверить работу кода $arRes = Tables\RoutsTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '>ODO' => 0), 'order' => array('DATE' => 'ASC', 'ID' => 'ASC'))); $arResult['BUY_ODO'] = MyCar::getBuyCarOdo($carID); $arResult['MAX_DATE_ODO'] = array(); $bFirst = true; foreach ($arRes as $ar_res) { if ($bFirst) { $bFirst = false; $arResult['FIRST_DAY'] = $ar_res['DATE']; } $arResult['ROUTS'][$ar_res['ID']]['DATE'] = $ar_res['DATE']; $arResult['ROUTS'][$ar_res['ID']]['ODO'] = $ar_res['ODO']; if (!isset($arResult['MAX_DATE_ODO'][$ar_res['DATE']]) || $ar_res['ODO'] > $arResult['MAX_DATE_ODO'][$ar_res['DATE']]) { $arResult['MAX_DATE_ODO'][$ar_res['DATE']] = $ar_res['ODO']; } } $arResult['LAST_DAY'] = date('d.m.Y'); $lastOdo = $arResult['BUY_ODO']; $arResult['DAY_ODO'] = array(); foreach ($arResult['MAX_DATE_ODO'] as $day => $odo) { $arResult['DAY_ODO'][$day] = round($odo - $lastOdo, 1); $lastOdo = $odo; } $arResult['ODO_ALL_DAYS'] = array(); $now_day = $arResult['FIRST_DAY']; while ($now_day !== $arResult['LAST_DAY']) { if (isset($arResult['DAY_ODO'][$now_day])) { $arResult['ODO_ALL_DAYS'][$now_day] = $arResult['DAY_ODO'][$now_day]; } else { $arResult['ODO_ALL_DAYS'][$now_day] = 0; } $now_day = $dateHelper->strToTime($now_day, '+1 day', 'site'); } } else { $arResult['FIRST_DAY'] = $date; $arResult['LAST_DAY'] = date('d.m.Y'); $arResult['BUY_ODO'] = MyCar::getBuyCarOdo($carID); //TODO: Проверить работу кода $arRes = Tables\RoutsTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '>=DATE' => $date, '>ODO' => 0), 'order' => array('DATE' => 'ASC', 'ID' => 'ASC'))); $arResult['MAX_DATE_ODO'] = array(); foreach ($arRes as $ar_res) { $arResult['ROUTS'][$ar_res['ID']]['DATE'] = $ar_res['DATE']; $arResult['ROUTS'][$ar_res['ID']]['ODO'] = $ar_res['ODO']; if (!isset($arResult['MAX_DATE_ODO'][$ar_res['DATE']]) || $ar_res['ODO'] > $arResult['MAX_DATE_ODO'][$ar_res['DATE']]) { $arResult['MAX_DATE_ODO'][$ar_res['DATE']] = $ar_res['ODO']; } } //TODO: Проверить работу кода $arRes2 = Tables\RoutsTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '<DATE' => $date, '>ODO' => 0), 'order' => array('DATE' => 'DESC', 'ID' => 'DESC'))); if ($arRes2) { $lastOdo = $arRes2[0]['ODO']; $arResult['LAST_RES'] = $arRes2[0]; } else { $lastOdo = $arResult['BUY_ODO']; } $arResult['LAST_ODO'] = $lastOdo; $arResult['DAY_ODO'] = array(); foreach ($arResult['MAX_DATE_ODO'] as $day => $odo) { $arResult['DAY_ODO'][$day] = round($odo - $lastOdo, 1); $lastOdo = $odo; } $arResult['ODO_ALL_DAYS'] = array(); $now_day = $arResult['FIRST_DAY']; while ($now_day !== $arResult['LAST_DAY']) { if (isset($arResult['DAY_ODO'][$now_day])) { $arResult['ODO_ALL_DAYS'][$now_day] = $arResult['DAY_ODO'][$now_day]; } else { $arResult['ODO_ALL_DAYS'][$now_day] = 0; } $now_day = $dateHelper->strToTime($now_day, '+1 day', 'site'); } } //TODO: Проверить работу кода $arRes2 = Tables\OdoTable::getList(array('select' => array('ID', 'DATE', 'ODO'), 'filter' => array('MY_CAR_ID' => $carID, '>=DATE' => $arResult['FIRST_DAY']), 'order' => array('DATE' => 'ASC'))); $arResult['ODO_TABLE'] = array(); foreach ($arRes2 as $ar_res) { $arResult['ODO_TABLE'][$ar_res['DATE']] = array('ID' => $ar_res['ID'], 'ODO' => $ar_res['ODO']); } $arResult['UPDATED'] = $arResult['INSERTED'] = array(); foreach ($arResult['ODO_ALL_DAYS'] as $day => $odo) { if (isset($arResult['ODO_TABLE'][$day])) { if ($odo != $arResult['ODO_TABLE'][$day]['ODO']) { $query = new Query('update'); $query->setUpdateParams(array('ODO' => $odo), $arResult['ODO_TABLE'][$day]['ID'], Tables\OdoTable::getTableName(), Tables\OdoTable::getMapArray()); $res = $query->exec(); $arResult['UPDATED'][$day] = $res->getResult(); } } else { $query = new Query('insert'); $arInsert[0] = array('MY_CAR_ID' => $carID, 'DATE' => $day, 'ODO' => $odo); $query->setInsertParams($arInsert, Tables\OdoTable::getTableName(), Tables\OdoTable::getMapArray()); $res = $query->exec(); $arResult['INSERTED'][$day] = $res->getInsertId(); } } }
private function sqlMassDelete($query = null) { try { if (is_null($query)) { throw new Exception\ArgumentNullException('query'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } $helper = new Lib\SqlHelper(); $arMap = $query->getTableMap(); $primaryId = $query->getDeletePrimary(); $arTableLinks = $query->getTableLinks(); $tableName = $query->getTableName(); foreach ($arTableLinks as $field => $arLinked) { foreach ($arLinked as $linkTable => $linkField) { if (is_array($linkField)) { foreach ($linkField as $linkF) { $arRes = Lib\Tools::runTableClassFunction($linkTable, 'getListFunc', array(array('select' => array('ID'), 'filter' => array($linkF => $primaryId)))); if ($arRes) { foreach ($arRes as $delID) { $deleteQuery = new Query('delete'); $deleteQuery->setDeleteParams($delID, true, null, Lib\Tools::runTableClassFunction($linkTable, 'getTableMap'), Lib\Tools::runTableClassFunction($linkTable, 'getTableLinks')); $deleteQuery->exec(); } } } } else { $arRes = Lib\Tools::runTableClassFunction($linkTable, 'getListFunc', array(array('select' => array('ID'), 'filter' => array($linkField => $primaryId)))); if ($arRes) { foreach ($arRes as $delID) { $deleteQuery = new Query('delete'); $deleteQuery->setDeleteParams($delID, true, Lib\Tools::runTableClassFunction($linkTable, 'getTableName'), Lib\Tools::runTableClassFunction($linkTable, 'getTableMap'), Lib\Tools::runTableClassFunction($linkTable, 'getTableLinks')); $deleteQuery->exec(); } } } } } foreach ($arMap as $field => $objData) { if ($objData->isPrimary()) { $primaryField = $objData->getColumnName(); $primaryObj = $objData; break; } } $sql = "DELETE FROM " . $helper->wrapQuotes($tableName); $sql .= " WHERE " . $helper->wrapQuotes($tableName) . "."; $sql .= $helper->wrapQuotes($primaryField) . " = "; if ($primaryObj instanceof IntegerField || $primaryObj instanceof FloatField) { $sql .= $primaryId; } else { $sql .= "'" . $primaryId . "'"; } $sql .= " LIMIT 1"; $delQuery = new Query('delete'); $delQuery->setQueryBuildParts($sql); $res = $delQuery->exec(); }
protected static function deleteAccount($primary, $confirm = null) { $query = new Entity\Query('delete'); $query->setDeleteParams($primary, $confirm, Tables\AccountsTable::getTableName(), Tables\AccountsTable::getMapArray(), Tables\AccountsTable::getTableLinks()); $res = $query->exec(); }
public static function checkTableLinks() { $bLinks = false; $helper = new SqlHelper(); $arLinks = static::getTableLinks(); $tableName = static::getTableName(); foreach ($arLinks as $field => $arLink) { $sql = "SELECT\n\t" . 't.' . $helper->wrapQuotes($field) . "\n"; $sql .= "FROM\n\t" . $helper->wrapQuotes($tableName) . " t"; $where = "WHERE\n\t"; $t = 0; $bFirst = true; foreach ($arLink as $tableName => $fieldName) { $t++; if ($bFirst) { $bFirst = false; } else { $where .= " AND\n\t"; } $sql .= ",\n\t"; $sql .= $helper->wrapQuotes($tableName) . " t" . $t; $where .= "t" . $t . "." . $helper->wrapQuotes($fieldName) . " = t." . $helper->wrapQuotes($field); } $sql .= "\n" . $where; $query = new Entity\Query("select"); $query->setQueryBuildParts($sql); $res = $query->exec(); if ($ar_res = $res->fetch()) { $bLinks = true; } } return $bLinks; }
public static function increasePointPopular($pointID = null) { try { if (is_null($pointID)) { throw new Exception\ArgumentNullException('pointID'); } } catch (Exception\ArgumentNullException $e) { $e->showException(); return false; } if (static::checkNeedIncreasePointPopular($pointID)) { $helper = new SqlHelper(); $query = new Query('update'); $sql = "UPDATE " . $helper->wrapQuotes(Tables\PointsTable::getTableName()) . " SET " . $helper->wrapQuotes('POPULAR') . " = " . $helper->wrapQuotes('POPULAR') . " + 1 WHERE ID = " . $pointID; $query->setQueryBuildParts($sql); $res = $query->exec(); if ($res->getResult()) { return true; } else { return false; } } }