Страницы

Поиск по вопросам

Показаны сообщения с ярлыком update. Показать все сообщения
Показаны сообщения с ярлыком update. Показать все сообщения

понедельник, 2 марта 2020 г.

UPDATE IF ELSE Mysql

#mysql #update #if #else


UPDATE personal_card SET

if bank_book >= price_tariff
    bank_book = bank_book - price_tariff, 
    bank_pay = bank_pay + price_tariff, 
    stop_date = DATE_ADD(CURDATE(),Interval 1 MONTH)
else
    pay_status = '0'

WHERE stop_date = CURDATE() 


Не могу разобраться в условиях IF ELSE, проверяем bank_book >= price_tariff, если
TRUE до выполняем условие, если нет, то изменяем pay_status = '0'. Понимаю что можно
сделать двумя разными запросами, но мне кажется что в одном, это правильнее.

Спасибо!
    


Ответы

Ответ 1



Дополнительная переменная заведена чтобы не выполнять проверку для всех полей, а только один раз на строку. Первый вариант: SET @MyVar = 1; UPDATE personal_card SET bank_book = IF(@MyVar := bank_book >= price_tariff, bank_book - price_tariff, bank_book), bank_pay = IF(@MyVar, bank_pay + price_tariff, bank_pay), stop_date = IF(@MyVar, DATE_ADD(CURDATE(),Interval 1 MONTH), stop_date), pay_status = IF(@MyVar, 1, 0) WHERE stop_date = CURDATE() Второй вариант: SET @MyVar = 1; UPDATE personal_card SET bank_book = (CASE WHEN @MyVar := bank_book >= price_tariff THEN bank_book - price_tariff ELSE bank_book END), bank_pay = (CASE WHEN @MyVar THEN bank_pay + price_tariff ELSE bank_pay END), stop_date = (CASE WHEN @MyVar THEN DATE_ADD(CURDATE(),Interval 1 MONTH), ELSE stop_date END), pay_status = (CASE WHEN @MyVar THEN 1 ELSE 0 END) WHERE stop_date = CURDATE(); Третий вариант: UPDATE personal_card SET bank_book = bank_book - price_tariff, bank_pay = bank_pay + price_tariff, stop_date = DATE_ADD(CURDATE(),Interval 1 MONTH), pay_status = 1 WHERE bank_book >= price_tariff AND stop_date = CURDATE(); UPDATE personal_card SET pay_status = 1 WHERE bank_book < price_tariff AND stop_date = CURDATE();

Ответ 2



UPDATE personal_card SET bank_book = IF(bank_book >= price_tariff, bank_book - price_tariff, bank_book), bank_pay = IF(bank_book >= price_tariff, bank_pay + price_tariff, bank_pay), stop_date = IF(bank_book >= price_tariff, DATE_ADD(CURDATE(),Interval 1 MONTH), stop_date), pay_status = IF(bank_book >= price_tariff, '0', '1') WHERE stop_date = CURDATE() Сделал так. На сколько это грамотно? Если будет более 1000 строк?

четверг, 9 января 2020 г.

Установка обновлений для Windows

#windows #update #установка


Есть загрузочная флешка с Windows Server 2008. После её установки необходимо скачать
и установить множество обновлений с узла Microsoft. На всё про всё уходит в среднем
2 часа (в зависимости от машины). Теперь вопрос: как мне ускорить этот процесс? Что
можно сделать?
    


Ответы

Ответ 1



Если необходимо устанавливать ОС на несколько машин, либо, в принципе, нужна частая установка, я бы задумался об интеграции обновлений в дистрибутив (заодно можно и необходимые драйверы интегрировать). В зависимости от статуса лицензии/активации есть несколько способов. Для организации, наверное, лучшим вариантом будет DISM. Выкачать обновления для интеграции проще всего, пожалуй, через WSUS offline. Чтобы не зацикливать вас только на этих вариантах, могу предложить также вариант с использованием sysprep+WAIK, а также ознакомиться с Microsoft Deployment Toolkit.

Ответ 2



Обновление свежеустановленной ОС происходит всегда дольше, чем последующие регулярные обновления. Как вариант для ускорения обновлений - развернуть собственный локальный сервер WSUS.

среда, 25 декабря 2019 г.

Как выключить обновление Windows?

#windows #update #windows_10


Использую 3G модем, поэтому экономлю каждый мегабайт трафика. Чтобы разные программы
"не лазили" в Интернет, открыл в брандмауэре только 80 и 443 порты.

Но Windows скачал обновления. Хорошо, что хотя бы вовремя увидел. В Windows 10 Preview
я не нашёл пункт "устанавливать обновления автоматически", поэтому поискал в Интернете
и уставил ключ в реестр:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update] 
"AUOptions"=dword:00000001


Есть ли теперь гарантия, что Windows больше не будет скачивать обновления? Или что
мне нужно для этого сделать?

Куда идут запросы обновления? Может, запретить в брандмауэре этот адрес? Или запросы
идут поверх брандмауэра?
    


Ответы

Ответ 1



Правильный, поддерживаемый Microsoft способ — групповые политики. Откройте редактор локальных групповых политик (Win + R — gpedit.msc), зайдите в Computer Configuration → Administrative Templates → Windows Components → Windows Update. Выберите Configure Automatic Updates и настройте как вам нужно. Редактирование реестра — грубый хак, Microsoft не давала гарантий, что имена нужных ключей реестра не поменяются в зависимости от фазы луны и направления ветра. Не пользуйтесь им. Групповые политики доступны для версий Windows старше Home. Но если вы хотите настроить систему под себя, вы ведь не будете сидеть на версии для начинающих?

Ответ 2



Если мешают именно обновления, то для большинства версий семейства WinNT (скорее всего для всех, но не могу проверить совсем древние) самый простой и надежный вариант отключить службу обновлений совсем. Для этого (требуются права локального администратора): заходим в список служб любым привычным способом, например ctrl+shift+esc => вкладка "Службы" => кнопка "Службы..." или win+R => services.msc Находим в списке "Центр обновления Windows" Двойной клик по службе и в открывшемся диалоге: меняем тип запуска на "Отключена" жмем кнопку "Остановить" жмем "Ок". На этом все, обновления проверяться перестанут, совсем, даже ручной режим будет не доступен. Если они вдруг понадобятся, то проделать все тоже самое, но при этом вернуть автоматический запуск службы и принудительно ее запустить, ну или дождаться перезагрузки. Аналогичным образом можно поступить и с другими службами, но будьте осторожны, не все службы можно так безболезненно выключить. Некоторые не даст выключить сама система, а некоторые могут быть необходимы для работы ваших программ, так что предварительно стоит изучить данный вопрос, а потом уже рубить все что рубится. Для Pro версий, также можно через групповые политики прописать localhost в качестве источника обновлений. В этом случае постороннего трафика возникать не будет, т.к все запросы будут заворачиваться обратно без использования внешнего соединения, но потребуется разобраться в редакторе групповой политики. Этот путь несколько сложнее и для одной-двух машин не слишком актуален, хотя если у вас их десяток другой, то стоит изучить групповые политики и их возможности максимально подробно, чтобы не заниматься любительским вело-строением. Возможности эти гораздо шире, чем о них пишут на современных популярных ресурсах. Что касается всех остальных программ - вопрос решается грамотной настройкой встроенного или стороннего брандмауэра. Под грамотной настройкой в данном случае следует понимать режим "Белого списка" (что не разрешено явно, то запрещено) для программ, а не протоколов или портов, т.к. открытые порты и протоколы вполне могут использовать и другие программы, в отличие от явного указания разрешенных программ. PS: не трогайте реестр руками, особенно если не уверены в том, что делаете (только что нагуглили, спросили у знакомого "хакера" и т.д.). Угробить его довольно легко, а вот восстановление, даже на Win7, самой не убиваемой из семейства, может оказаться серьезной проблемой.

Ответ 3



Есть гарантия, но не стопудовая, как ехинацею можна использовать файл hosts, с помощью снифера узнать на какие сервера "лезит" обновлялка Виндовс, и скопировать эти URL в файл hosts. Детальней про файл hosts: https://www.chaynikam.net/view_lesson.php?id=80

среда, 10 июля 2019 г.

Не срабатывает UPDATE

Здравствуйте. Делаю опросник на yii2. Отметил чекбокс - нажал голосовать - счетчики обновились. Это работает, но есть одно "но". UPDATE запрос не срабатывает на счетчиках у которых значение 0, ошибок нет, но и результата нет. Если же у поля будет какое-либо значение отличное от 0, то все хорошо срабатывает. При этом если выполнить нужный запрос в phpmyadmin, то даже с 0 значения обновляются.
Вот код с запросами из контроллера:
public function actionPoll($id) { $single = Poll::getOne($id);
if ($single->load(Yii::$app->request->post())) { if ($single->count1) { Yii::$app->db->createCommand("UPDATE poll SET count1 = count1 +1 WHERE id=$id")->execute(); } if ($single->count2) { Yii::$app->db->createCommand("UPDATE poll SET count2 = count2 +1 WHERE id=$id")->execute(); } if ($single->count3) { Yii::$app->db->createCommand("UPDATE poll SET count3 = count3 +1 WHERE id=$id")->execute(); } } return $this->render('poll', ['single' => $single]); }
А вот запрос который нормально выполняется в phpmyadmin:
UPDATE `poll` SET `count2` = `count2` +1 WHERE `id` = 2
Также прикрепляю представление:
field($single, 'count1')->checkbox(['label' => '', 'value' => $single->count1]) ?>
Подскажите пожалуйста в чем может быть проблема ?


Ответ

Проблема в том, что Вам не стоит указывать value в методе checkbox. Это потому, что метод checkbox автоматически считывает данные с модели. Вот как нужно вывести Вам checkbox:
field($single, 'count1')->checkbox(['label' => '']) ?>
Также хочу отметить, что Вы можете обновлять счетчики следующим способом:
$single->updateCounters(['count1' => 1]); //равносильно count1 = count1 + 1
В итоге следует также отметить, что если Вы не используете ActiveRecord, то Вам следует посмотреть в сторону PDO.

понедельник, 18 февраля 2019 г.

Установка обновлений для Windows

Есть загрузочная флешка с Windows Server 2008. После её установки необходимо скачать и установить множество обновлений с узла Microsoft. На всё про всё уходит в среднем 2 часа (в зависимости от машины). Теперь вопрос: как мне ускорить этот процесс? Что можно сделать?


Ответ

Если необходимо устанавливать ОС на несколько машин, либо, в принципе, нужна частая установка, я бы задумался об интеграции обновлений в дистрибутив (заодно можно и необходимые драйверы интегрировать).
В зависимости от статуса лицензии/активации есть несколько способов. Для организации, наверное, лучшим вариантом будет DISM. Выкачать обновления для интеграции проще всего, пожалуй, через WSUS offline.
Чтобы не зацикливать вас только на этих вариантах, могу предложить также вариант с использованием sysprep+WAIK, а также ознакомиться с Microsoft Deployment Toolkit