Задать вопрос
  • Как проранжировать числа в столбце на группы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну если совсем влоб, то
    WITH cte AS (
      SELECT id, 
             num, 
             LAG(num) OVER (ORDER BY id) lag_num
      FROM test
    )
    SELECT id, 
           num,
           CASE WHEN num <> 0
                THEN SUM(CASE WHEN num <> 0 AND lag_num = 0 THEN 1 ELSE 0 END) OVER (ORDER BY id) 
                ELSE 0
                END [group]
    FROM cte

    Сработает неправильно, если самая первая запись ненулевая... ну это как-нить сам поправь. Мне лень.
    Ответ написан
  • Получение статьи и комментариев к ней: одним запросом или двумя?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Для меня показанный результат как-то неочевидно пригоден к использованию. Куда как симпатичнее смотрится
    SELECT 'original post' AS type, content
    FROM   posts
    WHERE  id = 1
    
    UNION ALL
    
    SELECT 'comment', content
    FROM   comments
    WHERE  post = 1
    
    ORDER BY type = 'comment'

    И один запрос, и никакого дублирования.
    Ответ написан
    Комментировать
  • MySQL Command Line закрывается после ввода пароля?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запустите ярлык на CLI из окна CMD и смотрите сообщения. Больше всего похоже на сбой аутентификации.
    Ответ написан
    2 комментария
  • Как настроить доступ между устройствами сети, dhcp сервер которой находится на pfsense и сети, dhcp сервер которой находится на коммутаторе tp-link?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Навскидку как-то так:

    1. На коммутаторе для VLAN интерфейса к pfSense прописываете статический (и не входящий в диапазон выделения на pfSense) адрес из 192.168.1.0.
    2. На коммутаторе указываете адрес pfSense дефолтным шлюзом. Проверяете наличие связи коммутатора и pfSense в обе стороны, а также коммутатора к внешним адресам в Инете.
    3. Для VLAN клиентских портов прописываете статический адрес из 192.168.2.0 и включаете на нём DHCP-сервер. Проверяете факт раздачи адресов и коннект коммутатора и клиента в обе стороны.
    4. Включаете на коммутаторе маршрутизацию между подсетями.
    5. Прописываете раздачу DHCP-сервером коммутатора своего адреса как адреса шлюза по умолчанию.
    6. На pfSense в настройках его DHCP настраиваете раздачу адреса коммутатора из 192.168.1.0 как шлюза в подсеть 192.168.2.0/24. Проверяете. что всё работает.


    Ну и это вроде бы всё...

    Да, часть этих пунктов может, скорее всего, выполниться автоматически по факту настройки этого или предыдущих пунктов. Пункт 5 - почти наверняка.
    Ответ написан
  • Как настроить доступ между vlan?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как обычно - берём двухинтерфейсный маршрутизатор, один к порту в одном VLAN, другой к другому, адреса из соотв. подсетей, маршрутизация, и его на узлах как шлюз в другую подсеть.
    Если коммутатор уровня L2+ (а раз на нём есть DHCP-сервер, то это так), то он сам может работать маршрутизатором - прописываешь соотв. адреса внутреннего интерфейса в соотв. VLAN (один уже не надо, на нём DHCP-сервер), и указываешь их шлюзом.
    Да, подсети в разных VLAN не должны пересекаться, ессно.
    Ответ написан
    Комментировать
  • Как разобраться в VLAN что тут происходит?

    @Akina
    Сетевой и системный админ, SQL-программист.
    не до конца наверное понимаю работу vlan


    VLAN в первом приближении - это не просто, а очень просто.

    Первый шаг - это разделение по отдельным VLAN. Мысленно представляешь, что у тебя не один коммутатор, а несколько. Вот прям вместо коммутатора стоИт стопка один на другом. В первом - только VLANID=1, во втором VLANID=2, и так далее. Каждый коммутатор обслуживает строго один VLAN, а все остальные порты, на которых текущий VLAN отсутствует, тупо залиты цементом. Если коммутаторов несколько - то каждый в схеме размножается таким образом, а соединения между портами коммутаторов ещё и раскрашиваются, например, тегованный кабель синий, а нетегованный красный. Соответственно если у тебя есть транковая связь (гибридный или транковый порт) с каждой из сторон) - то в преобразованной схеме один кабель между такими коммутаторами размножается на несколько, каждый в схеме для своего VLAN. А если попадается случай, когда с одной стороны провода VLANID есть, а с другой стороны его нет - получается кабель, с одной стороны вставленный в порт, а с другой нет. И соответственно в схеме для именно этого VLAN связи между коммутаторами нет. Аналогично для случаев соединения "tag на untag" с одной стороны красный кабель, с другой синий, у обоих вторые концы "в воздухе", а связи нет.

    Второй, дополнительный, шаг - это соединение меж собой нетегованных портов разных VLAN в преобразованной схеме, если такие соединения исходно существуют, невзирая на номера VLAN. Скажем, если на порте есть нетегованный VLANID=2 (возможно, с другими VLANID, но тегованными), и порт соединён кабелем с другим портом того же или другого коммутатора, на котором есть нетегованный VLANID=3, то в преобразованной схеме ты соединяешь соотв. порты коммутаторов разных слоёв, соответствующих этим VLAN.

    Теоретически можно себе представить, что при настройке порта, один и тот же VLANID на порте прописан и как тегованный, и как нетегованный - но это явная ошибка конфигурации (если на порт придёт пакет в этом VLANID, коммутатор не знает, теговать его или нет, а дублировать пакет он просто не станет, не его это дело), и в подавляющем большинстве случаев конфигуратор такое просто не примет.

    После такого разделения ты можешь смело анализировать поведение одного VLAN, не обращая внимания на существование остальных.
    Ответ написан
    Комментировать
  • Заполнение столбца с данными по предыдущему столбцу excel/notepad/emeditor?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Только и исключительно VBA-макросом.
    Например, так:
    Public Sub process_data(index_range As Range, values_range As Range)
    Dim values()
    Dim i As Integer
    Dim coll As New Collection
    Dim onecell As Range
    values = values_range.Value
    For i = LBound(values, 1) To UBound(values, 1)
        coll.Add Item:=values(i, 1), Key:=Left(values(i, 1), 1)
    Next
    For Each onecell In index_range
        onecell.Offset(0, 1).Value = coll(onecell.Value)
    Next
    End Sub
    
    Sub test()
    Call process_data(ThisWorkbook.Sheets(1).Range("A1:A26"), ThisWorkbook.Sheets(1).Range("B1:B3"))
    End Sub
    Ответ написан
    Комментировать
  • Как сделать проверку на три условия?

    @Akina
    Сетевой и системный админ, SQL-программист.
    =ВЫБОР(2 * ЕПУСТО(A1) +  (A1 <> 0) + 1;"false";"publish";"")
    Ответ написан
    Комментировать
  • Нужна формула: узнать для приобретения скольких товаров хватит имеющейся суммы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вот не вижу проблем.
    1. Есть количество товаров, приобретённых юзером. То есть, грубо говоря, известно, что пропустить и откуда считать.
    2. Если надо набрать указанную сумму, то по имеющимся товарам нужна сумма с накоплением. А чтобы не учитывать уже купленное - домножать на признак "ещё не куплено", являющийся результатом сравнения текущего номера товара и количества приобретённых товаров.
    3. Отдельно вспомним, что стоимость - штука сугубо положительная. А после домножения на признак - неотрицательная. И, значит, сумма с накоплением строго неубывающая на начальных нулях, а дальше так и вообще строго возрастающая. Иными словами - сортированная.
    4. Осталось вовремя остановиться. Но именно так работает ВПР()/ГПР() на сортированном списке при поиске ближайшего/неточного значения.
    Ответ написан
    5 комментариев
  • Как настроить mikrotik с коммутатором Cisco?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как мне объяснить микротику, что на одном из портов стоит коммутатор?

    Ему вообще-то похрен.
    А циска пусть работает как тупой свитч. То есть абсолютно всё, кроме коммутирования - нахрен.

    я докупил Cisco Catalyst WS-C2960-24TC-L

    Можно было обойтись любым неуправляемым коммутатором на нужное число портов.
    Ответ написан
    Комментировать
  • Есть ли программа, которая при отправке запроса проверяет через какие маршрутизаторы и роутеры проходит запрос?

    @Akina
    Сетевой и системный админ, SQL-программист.
    программа которая видит через какие маршрутизаторы и роутеры и т.д проходит отправляемый запрос

    В общем случае получение полного маршрута - вообще без шансов.

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

    на работе в серверной куча лапши из проводов и свичей

    Ну значит надо просто медленно и планомерно эту "лапшу" разбирать, описывать и маркировать. Начать с пассивного оборудования, затем перейти к управляемым коммутаторам, затем к маршрутизаторам... сбор информации по соединениям и ARP, конфигурациям и пр... чтобы в конце прийти к полной схеме.

    Я, когда пришёл на свою нынешнюю работу, угрохал на такое разбирательство почти два месяца.
    Ответ написан
    Комментировать
  • Объясните CASE WHEN THEN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ...
    SET view = CASE ad_id WHEN 34 THEN 0
                          WHEN 35 THEN 1 
                          WHEN 36 THEN 2
                          END,
        amount = CASE WHEN ad_id = 36 
                      THEN 466
                      ELSE amount
                      END
    WHERE ad_id  IN (34, 35, 36);
    Ответ написан
    3 комментария
  • Как динамически делать выборку по дням, неделям или месяцам?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как вы видите, тут идёт выборка за 2 дня: 2024-04-09 и 2024-04-10. Но проблема в том, что количество дней указывает пользователь и их может быть сколько угодно. Подскажите, как правильно сделать, что если пользователь указал, например, 10 дней, то выборку сделать за 10 дней (начиная от сегодня)?

    Я вижу, что количество выходных полей зависит от внешних условий. То есть структура выходного набора динамическая, а всё вместе это по сути сводная таблица. То есть штука совсем даже не реляционная.
    Да, некоторые СУБД имеют встроенные средства для формирования PIVOT TABLE. Yо вот у MariaDB с этим не очень.

    Рекомендую - на стороне СУБД получать нормализованный набор записей (country_id, ts, MAX(hangup_rate), MAX(all_answered)), а сводную строить уже на клиенте.
    Ответ написан
    Комментировать
  • Есть ли в excel формула вставки строк?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Функция, встроенная или определённая пользователем, при использовании в формуле ячейки НЕ МОЖЕТ ИЗМЕНЯТЬ ЗНАЧЕНИЯ ЯЧЕЕК. В принципе не может. А любая такая попытка в определённой пользователем функции немедленно приводит к ошибке и аварийному завершению работы функции.
    Ответ написан
    Комментировать
  • Как показать 'соседние' записи?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Схематично:

    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn
        FROM tablename
        WHERE type = @type
        )
    SELECT /* DISTINCT */ t2.*
    FROM cte t1
    JOIN cte t2 ON t2.rn IN (t1.rn - 1, t1.rn, t1.rn + 1)
    WHERE t1.status = @status
    ORDER BY t2.rn
    Ответ написан
    Комментировать
  • Как получить доступ у серверу извне?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Любой маршрут пакета может быть представлен так:

    (source IP1) - (IP2 router1 IP3) - (IP4 router2 IP5) - ... - (IPn destination)

    У тебя весь маршрут точно известен. А потому временно добавляем на источнике (IP1) маршруты во все промежуточные подсети, если они не покрываются маршрутом по умолчанию или более широкими частными маршрутами, и с источника (IP1) начинаем последовательно пинговать IP2, IP3, IP4, .. и так до узла назначения.

    Где-то возникнет проблема, и очередной IP не ответит. Вот именно знание, кто не ответил, и какой именно тип ошибки пинга возвращён, и позволит определить, на каком узле и по какой причине грабли. Конечно, следует понимать, что в маршруте может быть несколько последовательных ошибок, и даже несколько параллельных на одном узле.

    Например, если проходит пинг на IP4, но не проходит на IP5, то в случае ответа No route to host проблема - в отсутствии маршрута в подсеть IP5 на узлах source (забыли добавить или сделали это неправильно) или router1, а в случае ответа Timeout проблемы с маршрутизацией на узле router2 или файрволом на любом из трёх задействованных в маршруте узлов.
    Ответ написан
    Комментировать
  • Как вставить данные сразу в 2 объединенные таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    в какой таблице будет храниться набор необходимых полей для вставки неизвестно

    Бред сивой кобылы (извиняюсь). Структура (точные имена полей, и в какой таблице какое поле) обязана быть заранее известна. Даже если используется псевдодинамическая структура на базе EAV или иным способом организованная.

    у меня есть 2 таблицы или допустим будет 3 ... Я хочу при выполнении insert into или update использовать эти таблицы

    MySQL не реализует одновременную вставку в более чем одну таблицу. А также не реализует использование запроса на вставку в CTE. Напрямую задача не решается.

    Правильная реализация - создание хранимой процедуры, которая принимает значения для всех параметров, и выполняет вставку нужных значений в таблицы последовательно выполняемыми запросами, при необходимости получая значения автоинкрементных полей из предыдущей вставки.

    Возможная (но нерекомендуемая) реализация - триггер на базовой таблице и передача параметров для подчинённых таблиц через определённые пользователем переменные.
    Ответ написан
    Комментировать
  • Как перенести большую базу на другой сервер без простоев?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Рабочий ли вариант если просто через rsync передать всю папку /var/lib/mysql?

    Просто перенос файлов рабочей БД окончится тем, что файлы есть, а базы нет, потому что неоткуда взяться метаданным в системной базе данных. Вернее, всё ещё забавнее - базы вроде бы и нет (USE приводит к ошибке "БД не существует"), но её нельзя создать, потому что она есть. И то же самое с таблицами (SELECT/DROP/прочее нельзя, потому что таблицы нет, CREATE нельзя, потому что она есть).

    Метод сработает, если переносить все БД сразу, включая служебные. Но требуется точное соответствие исходной и конечной конфигураций - начиная с версии и сборки MySQL и кончая именами каталогов и именами/паролями учётных записей в операционной системе. Плюс перегенерация и переподключение сертификатов.

    Еще вариант с репликацией, но насколько я понял всё равно базу нужно блокировать на момент дампа, а это тоже какое-то время

    Решений без блокирования практически не существует. Нет, можно наколхозить реальное решение, которое обойдётся вообще без остановки, я даже представляю как именно (FEDERATED ENGINE + triggers), но подробно рассказывать не буду - для её реализации нужны достаточная квалификация и опыт, на одних советах шанс на удачу невелик, скорее всё поломается.

    Есть вполне себе документированные способы: Copying MySQL Databases to Another Machine. Особенно последний из описанных. Он предполагает минимальное время простоя при использовании штатных средств.
    Ответ написан
    Комментировать
  • Можно ли по мак адресу присвоить Vlan ID Cisco?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Существуют port-based VLAN и MAC-based VLAN.
    Первый - это когда определённый VLAN назначается порту коммутатора статически.
    Второй - это когда VLAN назначается порту в зависимости от MAC-адреса подключенного к порту оборудования.
    Оба варианта работают, само собой, только с нетегованными пакетами, то есть на чисто клиентских либо гибридных портах, но не на транковых.

    Вроде бы второй вариант - именно то, что нужно. Но есть подвох. Всё зависит от того, как именно реализован протокол на конкретном устройстве. Потому как возможны два варианта.

    Первый - это когда пакет от хоста направляется в VLAN в зависимости от MAC узла-источника. В этом случае получится именно то, что нужно.

    Второй вариант (достаточно старый, по-моему, сейчас нигде не реализуется) - это когда порт коммутатора включается в VLAN, определяемый (первым) найденным на данном порте MAC клиента, и в дальнейшем не изменяется. Конечно, этот вариант не подходит. А потому на имеющемся оборудовании просто надо либо проверить на практике, либо почитать в мануале (впрочем, обычно этот момент не описывается), какой из вариантов реализован.

    Есть ещё третий вариант, хотя на самом деле первый. Это Voice VLAN. Эта возможность имеется не на всяком оборудовании, но если имеется, то она однозначно работает по первому варианту. То есть можно тот VLAN, в котором камеры, объявить Voice VLAN, и получить решение задачи.

    -------------------------------------

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