• Почему Windows 10 Enterprise (LTSC) Evaluation самопроизвольно автоматически завершает работу в виртуальной машине VirtualBox?

    erge
    @erge Автор вопроса
    Примус починяю
    нашел, в System Logs
    За несколько секунд до шатдауна:

    The process C:\Windows\system32\wlms\wlms.exe (DESKTOP-OB87TTK) has initiated the shutdown of computer DESKTOP-OB87TTK on behalf of user NT AUTHORITY\SYSTEM for the following reason: Other (Planned)
    Reason Code: 0x80000000
    Shut-down Type: shutdown
    Comment: The license period for this installation of Windows has expired. The operating system is shutting down.


    мда... и это 90 дней Evaluation ??? странн, суток еще не прошло как поставил.
    либо в VirtualBox не хочет давать эти 90 дней evaluation ??

    PS: наткнулся на аналогичную проблему
    Windows VM are switching to power off by themselves
    Ответ написан
    Комментировать
  • Можно ли открывать в браузере сайт которые запустил на виртуалке?

    erge
    @erge
    Примус починяю
    Нужно настроить проброс порта с хоста на гостя и соответственно подключаться.
    ну например как-то так:
    /usr/bin/qemu-system-x86_64 \
    ....
    -net user,hostfwd=tcp::8000-:8000 \
    -net nic


    на хосте подключаться на 127.0.0.1:8000
    Ответ написан
    Комментировать
  • Как сделать запрос в запросе в mysql?

    erge
    @erge
    Примус починяю

    надо что бы при запросе вывел где status= true, и count_id = количество id за 30 дней.
    |id|id_2|name|status|date| count_id |


    • количество записей считается COUNT при группировке по полям (см. GROUP BY), в данном случае по интервалу дат

    • но... в таком виде
      |id|id_2|name|status|date| count_id |
      вывести не получится! т.к. группировать по полям |id|id_2|name| не имеет смысла, они могут быть уникальны и никакого COUNT за интервал не получится, например как считать количество в интервале для id=1,2,3 ... ??? это группироваться никак не будет вообще, будет выводиться построчно для каждого id и количество будет Всегда равно =1 и так для всех id. определитесь что вам надо?! конкретно

    • можно выбрать записи со статусом true и посчитать количество в интервале, для этого поле date привести в некий интервальный формат, либо если надо за ПОСЛЕДНИЕ 30 дней, то просто:
      SELECT count(id) count_id
        FROM tbl
        WHERE status = 'true'
          AND date >= now() - interval 30 day
      ;




    см. пример на dbfiddle
    Ответ написан
    Комментировать
  • Как сделать, чтобы дата отображалась количеством часов в БД?

    erge
    @erge
    Примус починяю
    если предположить, что переменная типа DATETIME, то примерно так:

    -- дата начала
    DECLARE @t_start AS DATETIME = DATEADD(minute, -7410, GETDATE());
    -- дата конца
    DECLARE @t_finish AS DATETIME = GETDATE();
    -- разница между датами начала и конца в переменной типа DATETIME
    DECLARE @t_diff AS DATETIME = @t_finish - @t_start;
    
    -- разница между датами начала и конца
    SELECT @t_diff;
    
    SELECT DATEDIFF(second, DATEFROMPARTS(1900,1,1), @t_diff) / 3600.0 AS diff_h


    см. https://dbfiddle.uk/?rdbms=sqlserver_2014&fiddle=9...
    Ответ написан
    Комментировать
  • Как загрузить записи текущего месяца через SQL Loader?

    erge
    @erge
    Примус починяю
    попробуйте:

    datevalue "TO_DATE( :datevalue , 'YYYY-MM-DD')"

    см. TO_DATE() - преобразует строку в дату.
    Ответ написан
    Комментировать
  • Как настроить выгрузку excel на PHPEexcel чтобы выгрузка из mysql начиналась с первого элемента, а не со второго?

    erge
    @erge
    Примус починяю
    $query1 = mysqli_query($link, "SELECT * FROM goods ORDER BY id");


    $s = 1;

    UPD:

    да, заметил...
    зачем зафетчили первую строку до вывода в цикле??
    $myrow = mysqli_fetch_array($query1);
    удалите ее.
    Ответ написан
    3 комментария
  • Openweather из JSON в HTML как лучше сделать?

    erge
    @erge
    Примус починяю
    дату не обязательно брать из .dt она есть в текстовом виде в .dt_txt

    Даллее, есть два варианта, развернуть объект в:
    {"2019-12-22":[{"dt":1577048400,"main":{"temp":-21.94,"feels_like":-26.97,"temp_min":-22.46,"temp_max":-21.94,"pressure":1018,"sea_level":1018,"grnd_level":1013,"humidity":99,"temp_kf":0.52},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03n"}],"clouds":{"all":34},"wind":{"speed":1.97,"deg":139},"sys":{"pod":"n"},"dt_txt":"2019-12-22 21:00:00"}],
    ...}

    где ключи - это даты.
    и работать уже по датам...

    развернуть можно тем же map'ом

    let wd = {};
    data.list.map(e => {
    	let dt = e.dt_txt.split(" ")[0];
      if(typeof(wd[dt])!="undefined") {
      	wd[dt].push(e);
      } else {
      	wd[dt] = [];
      }
    });
    console.log(JSON.stringify(wd));


    либо ввести переменную "состояния" в которой хранить текущую дату и последовательно проходя по объекту сверять дату записи с датой в переменной, если они != то запоминать новую дату, добавлять перед выводом записи, вывод табличной строки с датой.

    как-то так:

    let iconUrl="";
    
    let wdate = ""; // переменная состояния
    function forecastTemplate (localData) {
    				let s = "";
            if (localData.dt_txt.split(" ")[0] != wdate) {
            	wdate = localData.dt_txt.split(" ")[0];
              s += `
              <tr><td colspan=2>${wdate}</td>
              `;
            }
            s += `
               <tr>
                    <td>
                        <div class="flex">
                            <div>
                                <span>${localData.dt_txt.split(" ")[1]}<span>
                            </div>
                            <div>
                                <img src="${iconUrl}${localData.weather[0].icon}@2x.png">
                            </div>
                        </div>
                    </td>
                    <td>
                        <div class="flex">
                            <div>
                                <span class="temp">${localData.main.temp}&#8451</span>
                            </div>
                            <div>
                                <span class="description">${localData.weather[0].description}</span>
                            </div>
                        </div>
                        <div class="flex">
                            <div>
                                <span>wind: ${localData.wind.speed} m/s,</span>
                            </div>
                            <div>
                                <span>clouds: ${localData.clouds.all}%,</span>
                            </div>
                            <div>
                                <span>pressure: ${localData.main.pressure} hPa</span>
                            </div>
                        </div>
                    </td>
               </tr>`
            return s
        }
    
    let html = "";
    document.body.innerHTML = `<table>${data.list.map(forecastTemplate).join("")}</table>`;


    См. на jsfiddle:


    PS: состояние-дату, можно хранить в свойстве вашего объекта updateUI
    Ответ написан
    Комментировать
  • Как построить sql запрос?

    erge
    @erge
    Примус починяю
    как-то так...

    SELECT
        c.title,
        ou.name,
        m.text,
        FROM_UNIXTIME(m.date) AS dt
      FROM chat_users cu
      INNER JOIN chat_users cuu ON cuu.chat_id = cu.chat_id AND cuu.user_id != cu.user_id
      INNER JOIN users ou ON ou.id = cuu.user_id
      INNER JOIN chat c ON c.id = cu.chat_id
      INNER JOIN messages m ON m.user_id = cuu.user_id AND m.chat_id = cu.chat_id
      WHERE cu.user_id = :ID_USER  -- ID пользователя по которому выбирать чаты.
      ORDER BY c.title ASC, m.date DESC
    Ответ написан
    Комментировать
  • Хитрая SQL группировка, как сделать?

    erge
    @erge
    Примус починяю
    SELECT
        position, count(1) AS n
      FROM (
        SELECT
            position, row_number() OVER (PARTITION BY position) rn
          FROM tbl
      ) t
      GROUP BY position, (rn+1) div 2
    ;

    см. пример на https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=50eda5...
    Ответ написан
    Комментировать
  • Как правильно преобразовать text в дату?

    erge
    @erge
    Примус починяю
    как писал @alexalexes
    Необходимо строку doc_time функцией STR_TO_DATE преобразовать в дату, а уже ее сравнивать с интервалом дат в BETWEEN

    SELECT *
      FROM order_kassa
      WHERE str_to_date(doc_time, '%d.%m.%Y') BETWEEN '2019-11-01' AND '2019-11-20';


    см. пример - https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=cde3b3...
    Ответ написан
    Комментировать
  • Группировка по дням из двух таблиц?

    erge
    @erge
    Примус починяю
    Вынести подзапросы по click в один подзапрос с группировкой (аналогично как по event)
    и сджойнить два подзапроса по дате, как-то так:

    SELECT
        e.*, c.`click`, c.`unique_click`
      FROM (
        SELECT
            DATE(FROM_UNIXTIME(`inserted_at`)) as `day`,
            SUM(IF(`type` = 2, `total_cost`, 0)) as `f_sum`,
            SUM(IF(`type` = 3, `total_cost`, 0)) as `d_sum`,
            SUM(IF(`type` = 4, `total_cost`, 0)) as `w_sum`,
          FROM `event`
          GROUP BY `day`
      ) e
      INNER JOIN (
        SELECT
            DATE(FROM_UNIXTIME(`inserted_at`)) as `day`
            SUM(IF(`type` = 1, 1, 0)) as `click`,
            SUM(IF(`type` = 2, 1, 0)) as `unique_click`,
          FROM `click`
          GROUP BY `day`
      ) c ON e.`day` = c.`day`
      ORDER BY e.`day` DESC
      LIMIT 10
    ;
    Ответ написан
  • Поиск в БД, как найти данные по используя like?

    erge
    @erge
    Примус починяю
    'UT%409%'

    $arr = [
        0 => "UT",
        1 => "409"
    ];
    
    $s = join("%", $arr)."%";
    
    $db->where('model', 'like', $s);
    Ответ написан
    Комментировать
  • Как найти ошибку sql из лога MODX?

    erge
    @erge
    Примус починяю
    Откройте файл /home/site.ru/core/xpdo/om/xpdoobject.class.php строка 240
    и посмотрите что там за запрос такой, который ошибку выдает.
    хотя это наврено PDO шный класс? хм... ну хотя бы посмотреть какой там объект/метод вызывается
    и в коде искать вызов этого места.

    PS: скопируйте с продакшена базу! тогда возможно скорее всего и получится повторить.
    Ответ написан
  • Почему не работает изменение таблицы?

    erge
    @erge
    Примус починяю
    Melkij , дело говорит )
    см. PostgreSQL CHECK Constraint

    ALTER TABLE persons 
       ADD CONSTRAINT persons_check_rols CHECK (rols in('registrator', 'coordinator', 'user'));
    Ответ написан
    Комментировать
  • Как удалить не удаляемую папку в Atom?

    erge
    @erge
    Примус починяю
    возможно нет прав на удаление,
    откройте терминал, перейдите в папку которая содержит указанную папку
    cd /path/name
    наберите
    sudo chmod 777 -vR НАЗВАНИЕ_ПАПКИ
    rm -vrf НАЗВАНИЕ_ПАПКИ

    PS: пробовали из терминала удалить? или из файлового менеджера?

    В атом надо в выпадающем меню выбирать не Delete а Remove Project Folder, затем, если необходимо удалить через файловый менеджер.
    Ответ написан
    2 комментария
  • Как следует изменить запрос чтобы при выборке всех записей подзапрос возвращал по одному значению для каждого кортежа?

    erge
    @erge
    Примус починяю
    Подзапрос который вставляется в список колонок должен возрващать только ОДНУ строку.
    либо перепишите подзапрос, чтобы он в любом случае возвращал только одну строку, либо джойните его или таблицу.
    Кроме того этот подзапрос никак не привязан к таблицам выборки ?? так и задуманно?

    какая вообще связь между таблицами, что это за таблицы? какой должен быть результат выборки?

    Вангую, что должно быть примерно так:

    SELECT
         w.Id
        ,w.IMO
        ,v.Name
        ,w.loginManager
        ,um.Name AS managerName
        ,w.loginStorekeeper
        ,umk.Name AS storekeeperName
        ,w.Date 
      FROM Waybill w
      INNER JOIN Vessel v ON w.IMO = v.IMO
      INNER JOIN User um  ON w.loginManager = um.Login
      INNER JOIN User umk ON w.loginStorekeeper = umk.Login
      ORDER BY w.Id
    Ответ написан
    1 комментарий
  • Избыточные данные или сложная логика запроса?

    erge
    @erge
    Примус починяю
    Одни и те же вопросы с разных аккаунтов??

    я так понимаю что это тоже самое или суть аналогична: Получить строку с максимальным совпадением? ??
    вместо `movie_desc` - `setting_value` (смотри ниже запрос и примеры)

    через оконные функции надо делать, если на MySQL 8 (СУБД вы НЕ указали...), функция ранжирования - row_number()

    -- здесь я вынес параметры (домены, языки) в отдельное представление param,
    -- которое определяется перед SELECT
    -- это сделано, для того чтобы по всему запросу не искать и вписывать их
    -- меняется все в одном месте:
    WITH param AS (
      SELECT
          2 AS primary_domain_id,    -- id первичного домена
          1 AS secondary_domain_id,  -- id вторичного домена
          2 AS primary_language_id,  -- id первичного языка
          1 AS secondary_language_id -- id вторичного языка
        FROM dual
    )
    SELECT *
      FROM (
        SELECT m.*,
            row_number() over (
              partition by m.movie_id
              order by
              	case
              	  when m.domain_id = p.primary_domain_id then 100
              	  when m.domain_id = p.secondary_domain_id then 50
              	  else 1
                end DESC,
              	case
              	  when m.language_id = p.primary_language_id then 100
              	  when m.language_id = p.secondary_language_id then 50
              	  else 1
                end DESC
            ) rn
          FROM `movie_desc` m, param p
          WHERE (m.domain_id = p.primary_domain_id
              OR m.domain_id = p.secondary_domain_id
              OR m.domain_id IS NULL)
    	    AND (m.language_id = p.primary_language_id
              OR m.language_id = p.secondary_language_id
              OR m.language_id IS NULL)
      ) t
      WHERE t.rn = 1
    ;


    Примеры на:
    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f46bf1...
    https://www.db-fiddle.com/f/8UigbxU6uNg6guU8ygKgrA/1

    PS: если MySQL более древний чем 8й, то попробуйте переписать как описано на второй странице той же статьи , ссылка на которую приведена выше.
    www.sql-tutorial.ru/ru/book_row_number_function/pa...
    Ответ написан
    2 комментария
  • Как вытащить данные при вложенном запросе?

    erge
    @erge
    Примус починяю
    У вас таблица oc_product внутри подзапроса, поэтому сначала нужно вывести там, а уже потом "сверху":

    SELECT
        name,
        sku,
        CONCAT('https://домен/', IF(ua2.keyword IS NULL,'',CONCAT(ua2.keyword, '/')), IF(ua3.keyword IS NULL,'',CONCAT(ua3.keyword, '/')), IF(ua4.keyword IS NULL,'',CONCAT(ua4.keyword, '/')), ua1.keyword) AS url
      FROM (
        SELECT
            name,
            p.sku,
            CONCAT( 'product_id=', p.product_id ) AS product_query,
            CONCAT( 'category_id=', pc.category_id ) AS category_query,
            CONCAT( 'series_id=', ps.series_id ) AS series_query,
            CONCAT( 'subcategory_id=', psc.subcategory_id ) AS subcategory_query
          FROM `oc_product_description` pd
          LEFT JOIN oc_product p ON (p.product_id=pd.product_id)
          LEFT JOIN oc_product_to_category pc ON (pc.product_id=p.product_id)
          LEFT JOIN oc_product_to_series ps ON (ps.product_id=p.product_id)
          LEFT JOIN oc_product_to_subcategory psc ON (psc.product_id=p.product_id)
          WHERE p.date_available <= NOW()
            AND p.status = '1'
      ) pd
      LEFT JOIN oc_url_alias ua1 ON ( pd.`product_query` = ua1.`query` )
      LEFT JOIN oc_url_alias ua2 ON ( pd.`category_query` = ua2.`query` )
      LEFT JOIN oc_url_alias ua3 ON ( pd.`series_query` = ua3.`query` )
      LEFT JOIN oc_url_alias ua4 ON ( pd.`subcategory_query` = ua4.`query` )
    ;


    PS: и форматируйте запросы нормально, читать будет удобнее.
    Ответ написан
    Комментировать
  • Как избавиться от колонки, которая появляется в dateGridWiev при выводе запроса с подзапросом?

    erge
    @erge
    Примус починяю
    Потому что у вас не задан альяс колонки для подзапроса
    (SELECT DISTINCT(Name) AS storekeeperName FROM User, Waybill WHERE (Waybill.loginStorekeeper = User.login))


    укажите альяс через AS

    например:
    SELECT
        Waybill.Id, Waybill.IMO, Vessel.Name, Waybill.loginManager, User.Name, Waybill.loginStorekeeper,
        (SELECT DISTINCT(Name) AS storekeeperName FROM User, Waybill WHERE (Waybill.loginStorekeeper = User.login))  AS storekeeperName,
        Waybill.Date 
      FROM Waybill, Vessel, User 
      WHERE (Waybill.IMO = Vessel.IMO)
        AND (Waybill.loginManager = User.Login)
        AND (Waybill.loginManager = User.Login)
      ORDER BY Waybill.Id


    PS: скобки в условии не обязательны и без них сначала выполняется оператор = а затем AND
    Ответ написан
    Комментировать
  • Как при прохождение цикла по объекту узнать, является ли свойством объекта другой объект?

    erge
    @erge
    Примус починяю
    Можно ли дойдя с помощью цикла до свойства hosts понять, что оно является объектом?


    typeof()

    console.log(typeof({}));
    // object


    for (var key in data) {
      if(typeof(data[key]) == "object") {
        console.log (key + " is object");
      }
    }



    Просто мне необходимо в этом случае, добавлять в тело цикла(или условия) после самого объекта(в данном случае data), или .объект или [свойство].


    вообще не понял о чем вы говорите...

    Кстати, с помощью какого метода, я смогу это всё добавлять? Мне нужно добавить либо data.hosts либо data[свойство]


    добавлять ЧТО и добавлять КУДА??

    и записи data.hosts либо data["hosts"] равнозначны.

    добавить в data.hosts еще один элемент?

    см. JavaScript: Как добавить новый элемент в объект?

    data["hosts"][2] = {name: 'web3'}

    но тут возникает неудобство с определением следующего номера ключа, т.к. это НЕ массив!
    с массивом было бы проще.

    data["hosts"][data["hosts"].length] = {name: 'web3'}
    // или
    data["hosts"].push( {name: 'web3'} );


    Upd:

    По мотивам комментариев:
    Решение.... рекурсивная функция
    const data = {
      user: 'ubuntu',
      hosts: {
        0: {
          name: 'web1',
        },
        1: {
          name: 'web2',
          null: 3,
        },
      },
    };
    
    // классически на if
    function getIn(obj, parr) {
      if(typeof(obj[parr[0]]) == "undefined") {
        return null;
      } else {
        if(typeof(obj[parr[0]]) == "object") {
          if(parr.length > 1) {
            return getIn(obj[parr[0]], parr.slice(1))
          } else {
            return obj[parr[0]]
          }
        } else {
          return obj[parr[0]];
        }
      }
    }
    
    
    // защита от дурака (когда некорректные параметры) + switch case
    function getIn(obj, parr) {
      if (
        typeof(obj) != "object" ||
        typeof(parr) != "object" ||
        parr.length == "undefined" ||
        parr.length == 0
      ) return null;
      switch (typeof(obj[parr[0]])) {
        case "undefined":
          return null;
        case "object":
          return (parr.length > 1)? getIn(obj[parr[0]], parr.slice(1)):obj[parr[0]]
        default:
          return obj[parr[0]];
      }
    }
    
    // еще короче 
    function getIn(obj, parr){
      return !(
        typeof(obj) != "object" ||
        typeof(parr) != "object" ||
        parr.length == "undefined" ||
        parr.length == 0
      )?
        typeof(obj[parr[0]]) == "object" ?
          (parr.length > 1)?
            getIn(obj[parr[0]], parr.slice(1)):obj[parr[0]] :
             obj[parr[0]] ?
              obj[parr[0]]: null:
              null
    }
    
    // и стрелочной функцией
    const getIn = (obj, parr) => !(
        typeof(obj) != "object" ||
        typeof(parr) != "object" ||
        parr.length == "undefined" ||
        parr.length == 0
      )?
        typeof(obj[parr[0]]) == "object" ?
          (parr.length > 1)? getIn(obj[parr[0]], parr.slice(1)):obj[parr[0]] :
           obj[parr[0]] ? obj[parr[0]]:null :
        null;


    UPD2:

    Решение без рекурсивного вызова
    function getIn(obj, parr) {
      let o = obj;
      for(let i=0; i< parr.length; i++) {
        o = o[parr[i]];
        if(typeof(o)=="undefined") return null;
      }
      return o;
    }
    Ответ написан