Задать вопрос
  • Как выбрать все последние запись где recipient = 1?

    @alexalexes
    Чтобы выдернуть по одному сообщению от каждого пользователя, нужно проранжировать сообщения особым счетчиком с подзапросом, имитирующим оконную функцию row_number.
    select a.*
      from (select m.*, u.*, count(select *
                                                  from messages as m2
                                                    join users as u2 on u2.id = m2.author
                                                where m2.recipient = 1
                                                    and u2.id = u.id -- имитация клаузы partition by
                                                    and m2.id > m.id -- имитация клаузы order by  ... desc
                                   ) as row_num, -- аналог row_number через оконную функцию:
                                 -- row_number() over(partition by u.id order by m.id desc) as row_num 
      from messages as m
       join users as u on u.id = m.author
    where m.recipient = 1
    ) as a
    where a.row_num = 1 -- берем 1 строку по ранжированному счетчику в пределах каждого id пользователя
    Ответ написан
    Комментировать
  • Ошибка запуска ТХТ, что может быть?

    @alexalexes
    Не названная программа пытается получить доступ к файлу из каталога C:\Users\vanek\OneDrive, предназначенного для монтирования к облаку.
    Вероятно, нужно проверить, что приложение OneDrive запущено и вы в нем авторизованы.
    Ответ написан
    Комментировать
  • В .NET 7 не запускается https. Что нужно сделать?

    @alexalexes
    Либо ставите самоподписанный сертификат к себе на операционную систему для домена localhost, либо отключаете проверку SSL сертификата в соединениях внутри проекта для тестовых сборок (если заранее не следовали второму варианту и не вынесли в конфиг софта это как отдельный параметр, то реализовать с нуля будет накладно).
    Ответ написан
  • Как сделать поиск в ячейке по знаку " с помощью VBA?

    @alexalexes
    Обработайте строку регулярным выражением методами RegExp в VBA:
    \w+\s"(?<=").*(?=")"
    https://regex101.com/r/14oM7H/1

    PS: Насчет работы регулярок в VBA - не имею представления, гуглите самостоятельно.
    Ответ написан
  • Как при запросе к ссылке на FOREIGN KEY получить имя пользователя а не id?

    @alexalexes
    https://www.w3schools.com/sql/sql_join.asp
    В вашем случае Orders это artist,
    Customers это track,
    Customers.CustomerName - это ваш искомый artistname.
    В джоине участвуют атрибуты:
    ON Orders.CustomerID=Customers.CustomerID
    а у вас будут:
    ON artist.artistid=track.trackartist
    Ответ написан
    Комментировать
  • Лучше использовать целое число или строку для индикатора состояния данных?

    @alexalexes
    Если не хотите фильдеперсовый enum, то делайте как должно быть по классике построения реляционных баз данных.
    Делаете таблицу справочник TransactionStatus, перечисляете там все состояния, с использованием id состояния. И этим id ссылаетесь на этот справочник в таблицах, где используется состояние, как внешний ключ.
    Ответ написан
  • Есть ли способ улучшить соединение ADSL?

    @alexalexes
    На ADSL не так много вариантов что можно сделать самому с оборудованием, чтобы понять, где проблема:
    1. Заменить роутер на другой. Чтобы не сильно тратиться, можно взять в компьютерном комиссионном магазине, либо на avito. Благо ADSL роутеры сейчас могут отдать почти даром: 200...1000 руб. Если роутер был у человека, который перешел с ADSL на оптику, то вероятно, что роутер жив чем мертв.
    На роутере могут со временем приходить в негодность входной трансформатор для гальванической развязки, что может понижать параметр сигнал/шум. Если заменить роутер, то может попасться более исправный экземпляр.
    2. Заменить сплиттер - коробочка-разветвитель телефон-роутер. Либо избавиться от нее, если телефона нет на линии.
    3. Заменить телефонный кабель от жилья, до места, где подключается к щитку провайдера, избавиться от скруток (в городских условиях это будет щиток в подъезде или на чердаке, в сельских - коробочка на телефонном столбе).
    По идее, это должен делать работник от провайдера. Но если у вас сложно проложен кабель в доме и на прилегающей территории, то часть работ придется делать своими силами.
    Ответ написан
    Комментировать
  • На чем дешево и долго хранить десятки Тб информации сейчас?

    @alexalexes
    Я думаю, 10 дисков с технологией записи CMR и без гелиевого наполнения по 8 Тбайт, запертые в сейфе в негорючем помещении с постоянным микроклиматом, будут куда дешевле и проще в эксплуатации, и пролежат 15 лет. Чем возиться с ленточным накопителем и лентами.
    Ответ написан
    Комментировать
  • Почему при использовании substr в php, если в тексте есть символ точки, то он считает не корректно?

    @alexalexes
    "ДокРу00001.Р1"

    Вероятно, у вас эта строка не в однобайтовой кодировке (скорее всего в utf8 работаете).
    Для таких строк нужно использовать набор функций для строк в многобайтовых кодировках, в данном случае вам нужна функция mb_substr вместо substr, иначе результат работы функций для однобайтовых кодировок в строках с многобайтовыми - не предсказуем.

    PS: не забудьте включить расширение mb_string в конфиге php сервера.
    Ответ написан
  • Очень-очень много фотографий в одной папке - это вредно для диска?

    @alexalexes
    1. Я бы такой каталог убрал из личного каталога пользователя системы, так как многие элементы интерфейса системы любят интерактивно проецировать состояние таких каталогов в корне проводника, Меню пуск и Рабочего стола (это каталоги Музыка, Загрузки, Изображения и т.д.). Это проецирование может быть ресурсоемким.
    2. Настроить просмотр файлов проводника Windows для этого каталога только в виде списка, без отображения миниатюр. Поэкспериментировать с настройкой кеширования миниатюр изображения. Это поможет снизить нагрузку при навигации.
    3. Использовать для навигации не проводник Windows, а программу-галерею. Например, ACDSee, XnView.
    4. Для копирования и переноса файлов - файловые менеджеры, которые не лезут в содержимое файла без необходимости (если не установлены плагины) - Total Commander, Far Manager.
    Ответ написан
    Комментировать
  • Как сделать реализацию чата как в мессенджерах?

    @alexalexes
    что должно происходить при отправке первого сообщения пользователем А пользователю B?

    До отправки сообщения на клиенте держится в памяти заготовка комнаты.
    После отправки сообщения сервер оповещает все экземпляры клиента пользователей A и B, что создал комнату между A и В (A и B могут открыть несколько экземпляров программ под своими логинами).
    Если экземпляры клиентов открывали заготовку комнаты у себя, которая по врЕменным параметрам участников соответствует реальной комнате A и В, то эти экземпляры клиентов синхронизируют свое состояние с тем, что прислал сервер, то есть делают отображение комнат реальным.
    Ответ написан
    Комментировать
  • Как узнать процент похожести текста?

    @alexalexes
    Самое простое - натравить поисковик на собственный ресурс запросом:
    "site:yousite.ru фрагмент фразы".

    PS: Сайт на момент запроса должен быть проиндексирован поисковиком.
    Ответ написан
    Комментировать
  • Можно ли написать SQL запрос с выражением в WHERE и в SELECT, но без повторения этого выражения и без вложенного SELECT?

    @alexalexes
    Но будет 2 вычисления MD5

    Выражения в select вычисляются после того, как отобраны строки по условиям в where.
    Если выходная выборка совсем небольшая, то оптимизировать работу функции в колонках не нужно - это экономия на спичках.
    Другое дело, если вы используете вычисляемую функцию в where. Чтобы она быстро работала есть 3 пути:
    1. Если функция вычисляется из данных, которые не зависят от контекста запроса, то нужно отказаться от этой функции, которая вычисляется при каждом запросе. Нужно хранить ее результат в отдельном атрибуте.
    2. Сделать индекс с использованием этой функции на атрибуте, тогда при использовании этой же функции в where сработает индекс.
    3. Если есть возможность, то нужно так преобразовать выражение where, чтобы все аргументы вычисляемой функции или выражения (складываем, вычитаем, умножаем делим, case-им) оказались входными параметрами или константами. Чтобы такое произошло, нужна обратная функция для md5 - reverse_md5. Но такой функции по математическим соображениям не существует.
    Иначе выражение бы выглядело так:
    where value = reverse_md5(:hache)
    Ответ написан
    1 комментарий
  • Как получить имя файла из zip архива, который содержит кириллицу?

    @alexalexes Автор вопроса
    Имя файла, получаемое при работе с модулем ZipArchive, из-за бага в этом модуле требует некоторого преобразования через промежуточные однобайтовые кодировки.
    Нужно провести такую цепочку преобразований:
    UTF-8 -> encode1 -> encode2 (encode3) -> UTF-8
    В php это будет так:
    $out_str = iconv('UTF-8', $encode1.'//IGNORE', $in_str);
    $out_str = iconv($encode1, $encode2.'//IGNORE', $out_str);
    $out_str = iconv($encode3, 'UTF-8//IGNORE', $out_str);

    Но проблема в том, что для каждой конфигурации сервера эти кодировки могут отличаться.
    Чтобы их найти нужно воспользоваться методом перебора.
    Для начала найдем все кодировки, которые поддерживает функция iconv.
    Для этого в консоли сервера вызовем:
    $ iconv -l
    Из набора кодировок нужно взять только те, которые содержат наименование "CPxxx", где xxx - число.
    С помощью скрипта провести полный перебор:
    $all_encoding = []; // сюда вставляем список всех кодировок iconv
    $out_encoding = array_filter($all_encodings, function($item){return strpos(strtolower($item), 'cp') !== false;});
      foreach($out_encoding as $encode1)
      {
        foreach($out_encoding as $encode2)
        {
          foreach($out_encoding as $encode3)
          {
              $str = iconv('UTF-8', $encode1.'//IGNORE', $out);
              $str = iconv($encode1, $encode2.'//IGNORE', $str);
              $str = iconv($encode3, 'UTF-8//IGNORE', $str);
              if($str !== false && $str !== '')
                echo $encode1.'::'.$encode2.'::'.$encode3.'::'.$str.'<br>';
          }
        }
      }

    Визуально ищем тот вариант, где имя файла восстановилось.
    В моем случае это:
    UTF-8 -> cp437 -> cp437 (cp866) -> UTF-8
    В коде это выглядит так:
    $out_str = iconv('UTF8', 'CP437//IGNORE', $in_str);
    $out_str = iconv('CP437', 'CP437//IGNORE', $out_str);
    $out_str = iconv('CP866', 'UTF8//IGNORE', $out_str);
    Ответ написан
    Комментировать
  • Какой отрезок содержит в себе больше целочисленных значений?

    @alexalexes
    Будьте внимательны, почему вы левую часть считаете в меньшую сторону, если там интервальная скобка ( ?
    (11;20] - с 12 по 20 - итого 9.
    (21;31) - с 22 по 30 - итого 9.
    И в итоге вариант [32;41] - он больше всех.
    Ответ написан
    6 комментариев
  • Браузер блокирует скачиваение с сайта нескольких файлов подряд. Как предупредить пользователей?

    @alexalexes
    Если следовать логике загрузки файлов из github (получить весь репозиторий) или любого файлового облака (получить весь каталог с файлами), то когда речь заходит о скачивании набора файлов, то этот набор лучше упаковать в архив и отдать клиенту отдельным файлом. Тогда вы не столкнетесь с ограничениями браузера.
    Ответ написан
    2 комментария
  • Могут ли USB хабы убить компьютер?

    @alexalexes
    USB хаб - самый неустойчивый узел.
    Как по производительности - он будет бутылочным горлышком, если к нему подключать высокоскоростные устройства. Так может подвести по питанию. Даже если по характеристикам потребляемого тока подключенных устройств хаб укладывается в лимиты, может оказаться сюрпризом то, что не хватает сечения жил основного провода для поддержания нужного уровня тока, либо идут большие потери на нагрев внутренней схемы хаба, или банально плохой контакт в соединении. Для стабилизации работы хаба в некоторых случаях требуется отдельное внешнее питание.
    Опасности нет, просто если хаб не вывозит, он просто будет работать нестабильно, а подключенные устройства будут либо на дежурном режиме работать, либо пытаться в бесконечном цикле запрашивать разрешение кушать тока по больше, но не получать его.
    Ответ написан
    Комментировать
  • Менял для программы значение кнопки "." на кнопку "Num 2" тк у меня нету нампада на клаве. Как вернуть значение клавиши?

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

    @alexalexes
    1. Сначала занулите свойство анимации. Потом вызовите setTimeout с нулевым временем, чтобы JS применил изменения анимации в DOM и внутри setTimeout добавьте свойство анимации. Тогда анимация перезапустится.
    nickinput.style.animation = "none";
      setTimeout(function() {
        if (validmail === false) {
            mailinput.style.animation = "blinker 0.6s linear 3";
        }
        }, 0);

    2. Задайте какой-нибудь color в ключевом кадре:
    @keyframes blinker {
      50% {
        background-color: #b11515;
        color: #aaa;
      }
    }
    Ответ написан
    3 комментария
  • Как сделать кастомные пагинации?

    @alexalexes
    Никогда не копался во внутренностях вордпресса.
    Но в вашем примере есть фрагменты, которые помогут собрать то, что вы хотите.
    1. Вам нужна некая функция, которая будет получать href относительно текущего раздела, чтобы перейти на другую страницу этого же раздела. В которую мы будем передавать номер страницы, а получать на выходе url.
    Вероятно, это оно:
    esc_url( get_pagenum_link( 999999999 ))
    2. Нам нужно получить текущий номер, страницы.
    Наверное, это оно:
    max( 1, get_query_var( 'paged' ) )
    3. Нам нужно получить общее число страниц, наверное так:
    $query->max_num_pages
    4. Кроме чисел, нам нужно адаптивно выключать ссылки, когда следующей страницы нет (ссылка Next), и когда предыдущей страницы нет (ссылка Prev, вы как раз показали этот случай 1/3Next). Эти ситуации обрабатываются путем сравнения текущего номера страницы с единицей или макс. номером страницы.
    Резюмируя эти предположения, можно получить вот такой код для генерации блока pagination:
    $curent_page = max(1, get_query_var( 'paged' )); // текущий номер страницы
    $max_page_num = $query->max_num_pages; // общее количество страниц
    $prev_page_num =  $curent_page - 1 > 0 ? $curent_page  - 1 : null; // номер следующей страницы, если ее нет, то null
    $next_page_num = $curent_page + 1 < $max_page_num ? $curent_page + 1 : null;  //номер предыдущей страницы, если ее нет, то null
    $prev_page_link = is_null($prev_page_num) ? null : esc_url( get_pagenum_link($prev_page_num));  //ссылка на следующую страницу, если ее нет, то null
    $next_page_link = is_null($next_page_num) ? null : esc_url( get_pagenum_link($next_page_num)); //ссылка на предыдущую страницу, если ее нет, то null
    echo '<div class="pagination">'
    .(is_null($prev_page_num) ? '' : '<a href="'.$prev_page_link .'">Prev</a> ')
    .$curent_page.'/'.$max_page_num
    .(is_null($next_page_num) ? '' : '<a href="'.$next_page_link .'">Next</a> ')
    .'</div>';
    Ответ написан