Задать вопрос
  • Как исправить ошибку с бд?

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

    Вариант 1 - всегда только извлекать весь массив целиком, в том виде, в каком он сохранялся. Никаких извлечений части массива, никаких по нему поисков, сортировок и прочего. Тогда преобразуйте массив во вменяемый сериализованный формат и сохраняйте в поле БД. Виктор Кожухарь в своём ответе разобрал этот вариант.

    Вариант 2 - возможна какая-то обработка. Извлечение части массива по какому-то критерию (порядковый номер, соответствие шаблону и пр.), поиск в массиве по заданному критерию, сортировка самого массива либо массивов по какому-то критерию.. Тогда однозначно делите массив на отдельные элементы и сохраняйте их по одному (конечно, соответствующим образом должна измениться структура БД). Делить можно и на стороне PHP (как показывает Евгений в своём ответе), и в запросе на запись на стороне MySQL. Первое, как я понимаю, вам проще сделать, но правильно - второй вариант.
    Ответ написан
    Комментировать
  • Как можно заполнить одну из 2 коробок по максимум?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если вес является единственным параметром, то это "Задача линейного раскроя".

    Ну и нехватает критерия максимума. Например, критерием может быть минимальный остаток допустимого веса, а может быть и максимальный процент заполнения...
    Ответ написан
    Комментировать
  • Lan тестер в активное оборудование? Можно ли прозванивать потенциально активные элементы сети?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Оборудование на другом конце - ситуация штатная. Тестер обязан её предусматривать, в т.ч. и вариант с PoE.

    Про убитый тестером порт даже не слышал. Но если такое произойдёт, то это будет явно следствие неисправности тестера. Либо "после, но не вследствие".

    А вот если на другом конце окажется что-то, что использует витую пару, но сетевым интерфейсом не является (например, порт "дальнобойной" АТС), можно остаться и без тестера...
    Ответ написан
    Комментировать
  • Как заполнить столбец таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    UPDATE test
    JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) new_id
           FROM test ) AS cte USING (id)
    SET test.new_id = cte.new_id;

    id - UNIQUE NOT NULL, либо вообще PRIMARY KEY. Поле либо выражение.
    Ответ написан
    Комментировать
  • Выбор максимального значения за период и timestamp этого значения. Ошибка sql_mode=only_full_group_by?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Ну типа так:
    SELECT DISTINCT
           MAX(player_count) OVER () AS players_max, 
           FIRST_VALUE(`timestamp`) OVER (ORDER BY player_count DESC) AS players_max_timestamp
    FROM steam_stats 
    WHERE `timestamp` >= '2024-07-01' AND `timestamp` < '2024-08-01'

    Если максимальное значение player_count встречается более чем один раз, то будет выведен случайный timestamp из возможных. Если нужен определённый (например, самый последний из них), расширьте выражение сортировки в определении окна.
    Ответ написан
    1 комментарий
  • Как найти минимальное свободное значение в диапазоне?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Предполагая, что тип данных поля - DECIMAL(xx, 3):
    SELECT MIN(value) + 0.001
    FROM test t1
    WHERE NOT EXISTS (
      SELECT NULL
      FROM test t2
      WHERE t1.value = t2.value - 0.001
      );


    https://dbfiddle.uk/9Yyi-pol

    PS. Возвращаемое значение не может быть меньше минимального из уже имеющихся в таблице.
    Ответ написан
  • Autoincrement или случайная строка в качестве primary key + foreign key?

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

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

    Таблица часто join-тся в запросах через hash.

    Что, берутся все записи таблицы, и сортировка выходного набора тоже по этому полю? нет? тогда статья тут близко не лежала.

    "hash" - это primary key и содержит md5 текста

    Тип данных и размер мы должны сами придумать?
    Ответ написан
  • Какое преимущество для текущей конфигурации обеспечивает настройка сетей VLAN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Какое преимущество для текущей конфигурации обеспечивает настройка сетей VLAN?

    Это же учебное задание, верно? и, поскольку маска у клиентских узлов не указана, следует полагать, что используется классовая адресация, и соответственно все 6 указанных узлов находятся в одной подсети.

    В этом случае деление на VLAN однозначно убирает взаимную "видимость" узлов, включённых в разные VLAN, а также разделяет широковещательный трафик. Опять же безопасность и всё такое...

    Можно же взять S1 и подключить к нему PC1, PC4 и т.д.

    Это же учебное задание, верно? ну так если имеется именно показанная схема, без обозначенных пространственных зон, то однозначно предполагается, что подключение клиентских узлов к другим коммутаторам - невозможно физически.

    Так что никаких "можно же взять" - нельзя, и точка.
    Ответ написан
    Комментировать
  • Как проранжировать данные таким образом, чтобы не менялся номер по определенному условию?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH cte AS (
      SELECT *,
             SUM((flag IS NULL) :: INT) OVER (PARTITION BY user_id ORDER BY product_id ASC) grp
      FROM test
      )
    SELECT product_id, user_id, flag,
           DENSE_RANK() OVER (PARTITION BY user_id ORDER BY grp ASC) "rank"
    FROM cte
    ORDER BY 1,2;

    fiddle
    Ответ написан
    2 комментария
  • Принцип работы с vlan?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Или же есть какие-то регламенты или негласные правила при создании вланов на сети?

    Есть неписанные правила, которые никто не обязан соблюдать. У каждого они свои. Вот, скажем. мой наборчик:

    0. Структура VLAN должна формироваться до создания сети. Любые изменения на уже существующей архитектуре будут достаточно проблемны и болезненны, особенно если сеть 24*7.

    1. Default VLAN (он же VLANID = 1) не должен использоваться в сети. Мягкий вариант - в данном VLAN нет ни одного порта, жёсткий - все порты Forbidden.

    Исключения:
    а) в сети вообще не используются VLAN;
    б) имеется оборудование, которое (вопреки документации) не работает правильно без включения транковых портов в default VLAN - например, DES-3028P.

    2. Сходные по назначению VLAN образуют группы, в которых VLANID помогает идентифицировать назначение VLAN.

    Пример 1: группы с VLANID = 2-99 и 4001-4095 используются как администрирующие (доступ к интерфейсу управления и мониторинга коммутаторов), управляющие (скажем, для MSTP, MPLS и прочих протоколов, требующих отдельного управляющего VLAN) или для какого-нибудь вендор-специфического межкоммутаторного обмена.
    Пример 2: группа с VLANID (например) 2x01-2x48 используется в гостинице для обеспечения проводного интернета (клиентского, SmartTV, IP-телефония), соответственно вторая цифра указывает на этаж, а 3-4 цифры на номер комнаты.

    Относительно правила "в каждом VLAN строго одна подсеть"... кому-то это абсолютная истина, а кому-то пустой звук. Я отношусь ко второй группе. Хотя и признаю, что есть архитектуры, когда такое соответствие оправдано.
    Ответ написан
  • Как обновить столбец таблицы учитывая агрегатные функции?

    @Akina
    Сетевой и системный админ, SQL-программист.
    По-моему, достаточно вычисляемого столбца:

    "Итог" numeric GENERATED ALWAYS AS ( COALESCE("Январь", 0) + 
                                         COALESCE("Февраль", 0) + 
                                         COALESCE("Март", 0) + 
                                         COALESCE("Апрель", 0) + 
                                         COALESCE("Май", 0) + 
                                         COALESCE("Июнь", 0) + 
                                         COALESCE("Июль", 0) + 
                                         COALESCE("Август", 0) + 
                                         COALESCE("Сентябрь", 0) + 
                                         COALESCE("Октябрь", 0) + 
                                         COALESCE("Ноябрь", 0) + 
                                         COALESCE("Декабрь", 0) ) STORED


    fiddle

    И запросов вообще никаких не нужно.

    PS. Но вообще такая форма хранения находится в вопиющем противоречии с нормальными формами. Настоятельно рекомендую переделать, пока не поздно.
    Ответ написан
    2 комментария
  • Как хранить списки в бд?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Вложенные списки организуют классическую связь 1:N (одному блоку данных соответствует несколько записей из списка).
    Если эти строки списка как-то обрабатываются (поиск, фильтрация и пр.), то наиболее разумна схема с 2 таблицами и внешним ключом.
    Если же списки только сохраняются и извлекаются, без вообще какой-либо обработки, то можно использовать предложенную mxelgin схему с хранением всего списка в одном поле TEXT либо JSON в сериализованном виде.
    Ответ написан
    Комментировать
  • Чем отличается маршрутизатор от точки доступа с коммутатором?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В чем отличие между роутером и коммутатором с точкой доступа?

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

    Дополнительный коммутатор просто обеспечивает несколько проводных интерфейсов в получающемся сегменте - потому как штатно на точке доступа всего один RJ-45 разъём.

    Ну а роутер - это синоним слова "маршрутизатор". Правда, в быту так называют SOHO маршрутизаторы с NAT.

    Есть ли смысл переплачивать, если делаешь обычную домашнюю сеть?

    Если в домашней сети уже есть проводной маршрутизатор с NAT (ака роутер), то никакого смысла приобретать ещё один маршрутизатор нет. Достаточно точки доступа. Дополнительный коммутатор нужен только если нехватает проводных портов, т.е. в малой сети на 2-3 проводных клиента вообще достаточно точки доступа без коммутатора.

    А если в домашней сети проводного маршрутизатора с NAT не имеется, то от покупки беспроводного роутера никуда не деться.
    Ответ написан
    Комментировать
  • Как правильно сделать приписку со склонением слов в PostgreSQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT amount || ' ' ||
           CASE WHEN amount % 100 / 10 = 1 THEN 'автомобилей'
                WHEN amount % 10 = 1 THEN 'автомобиль'
                WHEN amount % 10 IN (2,3,4) THEN 'автомобиля'
                ELSE 'автомобилей'
                END
    FROM generate_series(0,600) AS source (amount)

    fiddle
    Ответ написан
    Комментировать
  • На сколько актуальные L3 коммутаторы? Как вы делаете VLAN, на самом Mikrotik или ставит L3 комок, потом соединяете L3 и Mikrotik портом ACCESS?

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

    Вот сижу и думаю - что за бред? VLAN - чисто L2 штука. Где связь?

    У меня вон стоят коммутаторы L2 (даже не L2+), и они распрекрасно себе умеют VLAN, причём и port-based, и MAC-based. Единственно чего, связанного с VLAN, они не умеют, так это держать несколько IP адресов внутреннего интерфейса в разных VLAN, только один IP, доступный либо из одного указанного VLAN, либо из вообще любого. Они даже GVRP умеют без проблем.
    Ответ написан
  • Как залить большой файл sql в базу?

    @Akina
    Сетевой и системный админ, SQL-программист.
    захожу через putty по SSH и гружу по
    mysql -u****** -p****** ******* < *******.sql

    Напрасно.
    Загрузи CLI, а уж потом в нём грузи дамп командой SOURCE.
    Во-первых, не будет тайм-аута, интерактивно клиент, в отличие от безынтерфейсного, не воспринимается как померший, ибо постоянно льёт в выходной поток. Во-вторых, будешь видеть диагностику загрузки (особенно если запустишь CLI с ключом --tee).
    Ответ написан
    Комментировать
  • 10к строк по базе размером 500кк?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запрос
    SELECT * FROM base WHERE domain LIKE '%habr%' LIMIT 10000;


    Какой это нахрен поиск "по совпадениям"??? Это, блин, поиск по подстроке!!! причём в любом месте строки.

    С таким шаблоном поиска можете с обычными индексами вообще не трахаться, по причине абсолютной бессмысленности действа. Читайте про GIN, GiST, RUM и прочие виды индексов и поиск с их использованием.
    Ответ написан
    Комментировать
  • Как составить SQL запрос на получение дочерних категорий woocommerce, чьи дочерние категории имеют записи?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Модельное решение:

    SELECT brand.b_id
    FROM brand
    NATURAL LEFT JOIN model 
    NATURAL LEFT JOIN item
    GROUP BY 1
    HAVING NOT SUM(i_id IS NULL)


    fiddle
    Ответ написан
    Комментировать
  • Безопасна ли установки ПО для VDI?

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

    https://www.vmware.com/go/viewclients (перенаправляет на https://customerconnect.omnissa.com/downloads/info..., который недоступен из России, используйте VPN).

    Можно использовать не нативный, а браузерный клиент. Там контроль за доступом к локальным ресурсам можно вести ещё и средствами браузера.
    Ответ написан
    Комментировать
  • Как исправить ошибки в БД Битрикса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ALTER TABLE Statement

    Например, для первого сообщения это будет, вероятно,

    ALTER TABLE bitrix_db_name.b_crm_kanban_supervisor 
      MODIFY COLUMN `ENTITY_TYPE_ID` tinyint unsigned NOT NULL;

    На время выполнения остановите и выгрузите все сервисы Битрикса. И не забудьте заменить имя БД на правильное.

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

    SELECT COUNT(*)
    FROM bitrix_db_name.b_crm_kanban_supervisor
    WHERE ENTITY_TYPE_ID < 0;

    и убедиться, что результат его выполнения - ноль. Если же полученное значение - ненулевое, то следует сильно разбираться, как так получилось.

    PS. В теории при обновлении должна запускаться процедура, которая конвертирует данные из старой структуры в новую. Проверьте, что такая существует, и что вы точно её запускали.
    Ответ написан
    Комментировать