• Как выбрать последнюю запись с group by?

    @alexalexes
    Как-то так:
    select b.*
    from (select a.*, -- атрибуты по агрегированной статистике
                -- атрибуты записей-кандидатов на последние записи
                 s.id id_2,
                 s.product_id product_id_2,
                 s.warehouse_id warehouse_id_2, 
                -- ......
                 row_number() over (partition by s.product_id, s.warehouse_id, s.date order by s.id desc) r_num -- нумеруем кандидатов, по порядку id в статистике
    from (select
             product_id,
             size,
             warehouse_id,
             max(date) later_date, -- поздняя дата
             sum(orders) as orders
        from stats
      where date(`date`) >= '2023-09-01' and date(`date`) <= '2023-09-04'
       group by product_id, warehouse_id, size
    )  a
    left join stats s on s.date = a.later_date
                     and s.product_id = a.product_id
                     and s.warehouse_id = a.warehouse_id) b
    where b.r_num = 1 -- берем первого кандидата (нужно проверить, будет ли null, если left join не присоединит запись)

    Посмотрите план выполнения запроса, он скорее всего будет ужасен, так как нужно разделять эти два вида запросов, запрашивать отдельно каждый вид.
    Ответ написан
  • Как сделать таймер отсчёта как на фото?

    @alexalexes
    Нужно менять механику смещения параметра в translate3d, чтобы смещение по вертикали анимировалось между (n/2) и (n/2) + 1 высотой списка (перелистывались соседние элементы центральной части списка). Когда анимация достигнет уровня (n/2) + 1, нужно сделать два одновременных действия: 1 - переставить последний элемент списка на первое место, 2 - вернуть уровень до отметки (n/2). Тогда будет достигнут эффект замкнутости и цикличности списка и анимация не будет откатываться назад.
    Ответ написан
    1 комментарий
  • Есть ли способы включить компьютер по wake on lan через nat?

    @alexalexes
    Может есть "старый, советский, есть в каждом доме" способ чтобы обойти без покупки белого ip?

    Вам понадобится "старый, советский, есть в каждом доме" комп, который остался после предыдущего апгрейда и не оказался в комиссионке. В старом компе должен остаться CD/DVD привод. Подставьте лоток привода так, чтобы он находился напротив кнопки включения вашего нового компа. Настройте профиль удаленного подключения на старом компе в AnyDesk или TeamViewer, так, чтобы автономно можно было подключаться к нему из любого другого устройства.
    Чтобы включить новый комп, вам нужно удаленно зайти на работающий в сети старый комп и программно на иконке дисковода активировать команду открыть или закрыть дисковод, тогда новый комп включится.
    PS: такую же операцию можно провести и без дисковода. Из окружения старого компа будет доступна локальная сеть, по которой вы можете отправить любые команды на любые устройства локальной сети.
    Ответ написан
  • Полезный твик для Windows?

    @alexalexes
    Вы просто еще не выбрали свой любимый редактор кода (IDE), и не кастомизировали его настройки под HTML.
    Любой продвинутый редактор кода позволяет сделать быстрые вставки тегов в режиме редактирования HTML, например, Visual Studio Code.
    Ответ написан
    7 комментариев
  • При записи в базу MySQL возникает ошибка, хочу ее пропустить, как?

    @alexalexes
    В любой непонятной ситуации, которая не вызвана синтаксической ошибкой в PHP, поможет try-catch:
    try
    {
      $insert->execute($mediaData);
    }
    catch(Exсeption $e) // см. также типы исключений того модуля, который подключается к СУБД, можно реагировать только на них, если подставить нужный тип
    {
      // тут код, который выполняется в случае ошибки (не обязательно при взаимодействии с СУБД)
    }
    finally
    {
     // тут код, который выполняется при любом исходе
    }
    Ответ написан
    Комментировать
  • Как настроить обмен данными между сайтами, для автоматического обновления данных?

    @alexalexes
    На ум приходит только организовать выгрузку на основном сайте обновленных данных каталога товаров в JSON или XML – формате, передачу и получение данных на дополнительных сайтах, и затем в цикле проводить запросы к базе, сравнение и обновление данных о стоимости каждого товара.

    Именно так и использовать, поскольку у вас нет единой базы данных на все сайты. Только нужно написать скрипты, чтобы все операции осуществлялись в полуавтоматическом режиме с логированием каждого действия и ошибок на каждом этапе импорта/экспорта.
    Подозреваю, 4 тыс. запросов к базе данных в цикле - не рационально, но как это сделать более разумно?

    Вообще, ерунда. Конечно, нужно продумать использовать очереди, если такой пакет обновлений проходит значительное время. И не забыть правильно настроить блокировки в транзакциях, чтобы не получить коллизии данных во время выполнения импорта/экспорта, если в это время будут делать заказы на изменяемый товар.
    PS:
    два дополнительных сайта на LARAVEL,

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

    @alexalexes
    Вызвать мастера от провайдера с формулировкой "барахлит интернет, ненадежный коннект". У него будет инструмент для обжимки и пару копеечных коннекторов с собой. Главное, чтобы не отказался переобжать ваш кабель, может и на халяву выделить новый кабель от провайдера.
    Можно починить за 0 руб.
    Ответ написан
    Комментировать
  • Как правильный выбрать блок питание для ноута Samsung R510?

    @alexalexes
    У оригинального блока питания 19V 4.74A. Вам IPPON SD90U будет достаточен по току, но можно и мощнее (чтобы меньше перегревался), если денег не жалко.
    Подойдет любой блок питания 19...20V с током не менее 4.5A, можно даже тупо отзерать или заменить провод у первого попавшегося качественного блока питания любой другой фирмы ноутов на провод с разъемом 5.5х3.0.
    Китай всякий не предлагать так как знаю 1000 и 1 случи как они убивают ноуты =(

    Китайцы, бывает, не догружают схему БП по мощности, поэтому на нужных 4.5... 4.76 амперах схема будет работать на пределе, и выделять много тепла. Также возможны пульсации. Если у вас есть возможность проверить эти факторы или есть обзор на испытание конкретных моделей БП китайцев, то брать можно.
    Ответ написан
    Комментировать
  • Как правильно указать ссылку на путь?

    @alexalexes
    <a href="/index.html" class="dotted-link">Форма</a>

    А еще лучше настроить путь на индексную страницу на http-сервере, чтобы по адресу корня / перенаправляло на index.html.
    На apache это настраивается в корневом файле htaccess:
    DirectoryIndex index.html
    тогда в ссылках достаточно ссылаться на корень:
    <a href="/" class="dotted-link">Форма</a>
    Ответ написан
    4 комментария
  • SATA/600 = SATA III (нужен оф. источник)?

    @alexalexes
    Официальный документ вот - https://sata-io.org/sites/default/files/documents/...
    Скорее вас заинтересует вопрос-ответ 15:
    Q15: What’s the real-world data transfer rate of SATA 6Gb/s?
    Ответ написан
    Комментировать
  • Почему тачпад регулирует яркость на ноутбуке?

    @alexalexes
    В биосе нужно выключить работу Fn-функции по умолчанию, чтобы только при включении Fn вы сами включали доп. функции ноутбука.
    Ответ написан
    Комментировать
  • Сколько еще проживет диск?

    @alexalexes
    Если 60 градусов в простое - то накиньте радиатор на SSD, обеспечьте обдув. Если эта температура после длительной записи на диск - то все норм.
    Ответ написан
  • Для чего люди ставят таймера?

    @alexalexes
    Живой таймер в вебе обычно нужен, когда нужно открыть или закрыть какой-то функционал без перезагрузки страницы, на какой-то период:
    - открыть форму предзаказа с X часов;
    - начать, завершить онлайн тестирование;
    - открыть, закрыть подачу заявок, документов и т.д.
    - начать показывать видеотрансляцию в определенное время вместо статичной заставки (знакомо? до начало осталось 10 часов, 2 мин, ждем пользователя ... - это работа такого таймера).
    Ответ написан
    2 комментария
  • Как получить "хеш"/сравнить изображение?

    @alexalexes
    Для ведения новостей прежде всего нужно определить порядок, как создавать каталоги для хранения сопутствующего контента для людей, кто ведет их. Если плагин галереи не берет на себя обязанность автоматически создавать каталоги под свои нужды и не скрывает это от контент-менеджера, то контент-менеджер (человек) тупо складывает картинки в один каталог.
    На моей практике я делаю так.
    Под новости создаю каталог news, в каталоге на каждый год создаю каталог года - 2023.
    Внутри каталога года создается каталог конкретной новости, который создается менеджером для новости, если требуется положить дополнительный контент. Обычно, имя у него такое: YYYY_MM_DD_NN, где YYYY - год, MM - месяц, DD - день, NN - порядковое число новости в один день.
    Для повторяющегося контента можно задать каталог по умолчанию в news, например default, и складывать туда часто используемые изображения, заглушки и т.д.
    И самое, главное, чтобы эту практику поддерживали менеджеры, тогда проблем с дублированием не будет, и не будет бардака в новостях.
    Ответ написан
  • Почему не определяется USB порт?

    @alexalexes
    Возможно, дело в питании, в особенности, если вы рассчитываете на то, что хаб будет тянуть подключения жестких дисков или подобных устройств, или поддерживать быструю зарядку. У хаба должен быть качественный толстожильный кабель или, вообще, отдельное питание, к тому же его нужно подключать в порт, который расположен на материнской плате, а не вынесен на противоположную сторону корпуса ноутбука. Возможно, в ноутбучном исполнении вам придется подключить ноут к питанию, чтобы добиться стабильности работы хаба.
    Ответ написан
    4 комментария
  • Почему маска ввода номера телефона JS не срабатывает на странице оформления заказа?

    @alexalexes
    1.
    window.addEventListener("DOMContentLoaded"...
    Этот обработчик развешивает обработчик на маску после загрузки страницы. На формы, которые сформированы динамически после этого события - этот обработчик не захватит, на тех формах input-ы будут без масок.
    Для этого нужно из анонимной функции этого обработчика нужно сделать нормальный именованный метод, и использовать этот метод, как в событии DOMContentLoaded, так и в других событиях, когда дорисовываются динамически еще какие-то дополнительные формы.
    2.
    ... document.querySelectorAll('.tel')...
    На input-е должен быть класс tel, вышеупомянутый обработчик пробегает только по таких элементам.

    3. На input-элементе можно проверить, висит ли нужный обработчик событий. Нажмите F12, перейдите во вкладку Элементы, активируйте опцию "Выбрать элемент для проверки", чтобы мышкой можно было указать на экране исследуемый элемент. Перейдите в подвкладку "Прослушиватели событий", и посмотрите, есть ли такие обработчики:
    input.addEventListener("input", mask, false);
        input.addEventListener("focus", mask, false);
        input.addEventListener("blur", mask, false);
        input.addEventListener("keydown", mask, false)

    Если есть, то посмотрите, на какой участок кода они ведут. Если нет, то проблема по пункту 1 или 2.
    Ответ написан
    Комментировать
  • Насколько хорошо нужно уметь верстать, чтобы перейти к JS?

    @alexalexes
    Если вы больше дизайнер, и чуть-чуть верстальщик, и вы не собираетесь ничего автоматизировать в том, что верстаете, то в JS вам лезть не нужно, нужно знать на зубок как работает CSS (и вкладка Элементы по F12).
    Если уже собрались чуть-чуть автоматизировать формочку - то чуть-чуть изучайте JS (вкладки Элементы, Консоль, Источники по F12).
    Если пошли во все тяжкие, и делаете интерфейс пользователя полностью в формате одностраничного сайта (одностраничный - подчеркнуть), то будьте добры знать, как применять все то, что расположено во вкладках по F12 - Элементы, Консоль, Источники, Сеть, Производительность, Память и т.д - все чего касается рукой окружение браузера.
    Ответ написан
    Комментировать
  • Где здесь ошибка?

    @alexalexes
    Палим учетные данные окружения сервера.
    $conn = new mysqli("localhost", "y96360rs_a", "xR&O&&37", "y96360rs_a");

    То, что вы в вопросе показали пример запроса с параметрами - он выполнен с помощью склейки строк - так делать нельзя. Подготовленные запросы пишутся так:
    $sql = "UPDATE `admins` SET `login` = ?, `pass` = ?, `name` = ?, `role` = ? WHERE `id` = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('ssssi', $login, $pass, $name, $role, $id);

    Почувствуйте разницу.
    $id = $conn->insert_id;
    Зачем оно после запроса обновления, вы же знаете id изначально?
    Ответ написан
    Комментировать
  • Как можно рассортировать элементы базы данных по русскому алфавиту?

    @alexalexes
    У MySQL для сортировки кириллицы нет специфичных рекомендаций к order by.
    Только, если вы не захотите применить естественную сортировку (от кодировки не зависит), то в MySQL нет для этого функций, есть некоторое подобие решения проблемы:
    select '10' Name union
    select '1' Name union
    select '20' Name union
    select '2' Name
    order by length(Name), Name
    Ответ написан
    Комментировать
  • Как лучше запрятать важные данные в коде?

    @alexalexes
    Свою клиентскую часть платежной системы делаешь как отдельный микросервис со своим локальным API и используешь на более подготовленном серверном окружении с точки зрения безопасности.
    Ответ написан
    Комментировать