Задать вопрос
  • Как выбрать конкретную строку из Mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT SUBSTRING_INDEX(SUBSTRING(full FROM 30 + LOCATE('https://www.youtube.com/embed/', full)), '"', 1)
    FROM params
    WHERE LOCATE('https://www.youtube.com/embed/', full)
    -- AND id=247397
    Ответ написан
  • На одном порте и и транк tagged (тегированный) и аксесс untagged(не тегированный)?

    @Akina
    Сетевой и системный админ, SQL-программист.
    можно порт сделать так чтобы,порт был и tagged (тегированным -определенным vlan-ом) и аксессом ?

    Можно, делай.

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

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT client
    FROM ( SELECT DISTINCT client
           FROM Dep
         UNION ALL
           SELECT client_id
           FROM Contact ) total
    GROUP BY 1
    HAVING COUNT(*) = 1
    Ответ написан
    Комментировать
  • Как вывести всех родителей у подкатегории до главной категории?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH RECURSIVE
    cte AS ( SELECT *, 1 level
             FROM category 
             WHERE id = $category_id
             UNION ALL
             SELECT cat.*, cte.level + 1
             FROM category cat
             JOIN cte ON cat.id = cte.parent_id )
    SELECT *
    FROM cte
    ORDER BY level;

    Для древних версий:
    SELECT CONCAT_WS('=>', c1.id, c2.id, c3.id, c4.id, c5.id) path
    FROM category c1
    LEFT JOIN category c2 ON c1.parent_id = c2.id
    LEFT JOIN category c3 ON c2.parent_id = c3.id
    LEFT JOIN category c4 ON c3.parent_id = c4.id
    LEFT JOIN category c5 ON c4.parent_id = c5.id
    WHERE c1.id = $category_id

    Ну соответственно подрихтовать до нужного вида выходного набора.
    Ответ написан
    4 комментария
  • Может кто подскажет правильно ли составил запрос sql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запрос неверен синтаксически.
    1. Каждый JOIN обязан иметь свой ON. Это только MySQL/MariaDB лояльно относится к таким вещам.
    2. Литералы даты должны быть обрамлены кавычками - это как минимум. А кроме того, формат литерала даты должен чётко соответствовать таковому для используемой СУБД - возможно, даже нужно использовать функцию преобразования строкового значения в дату.
    3. Формально - запрос должен быть завершён символом точки с запятой.

    Запрос неверен логически.
    1. Отсутствует связь между заказом/менеджером и покупателем.
    2. Отсутствует подсчёт общей суммы заказов покупателя.
    3. Не предусмотрен вариант, когда у покупателя посередь периода сменился менеджер (менеджеры увольняются, да...). Впрочем, он не предусмотрен и в задании...
    4. Задание требует "с 01.01.2013", т.е. включительно, а в условии отбора используется строгое неравенство.

    Всё остальное - правильно.
    Ответ написан
    Комментировать
  • Почему смартфон не пингует компьютер в локальной сети, хотя наоборот работает?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Значительный процент WiFi-AP по умолчанию использует изолированный режим работы беспроводной части - т.е. беспроводному клиенту разрешён только трафик в WAN-интерфейс. В проводной LAN-сегмент или к другому беспроводному клиенту - трафик блокируется.
    Ответ написан
    2 комментария
  • Как найти в mysql ряд где значение json массива равно значению?

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

    SELECT id, CAST(array_test AS CHAR) array_test 
    FROM test
    WHERE JSON_OVERLAPS(array_test, CAST('[2]' AS JSON));


    DEMO fiddle

    PS. Да, там именно запятая. И знак - именно восклицательный.
    Ответ написан
    Комментировать
  • Пользователи и рабочий график: как хранить?

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

    Налицо тривиальная связь типа "много-ко-много". И соответственно хранение - две таблицы связываемых сущностей и связующая таблица. Т.е.

    1) User (user_id, name, ...);
    2) Dates (date, type, ...);
    3) UsersDates (user_id references User (user_id), date references Dates (date));
    Ответ написан
  • Как побороть ошибку #1032 - Невозможно найти запись?

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

    DEMO

    Походу, это phpmyadmin в очередной раз показал своё свиное рыло...
    Ответ написан
    Комментировать
  • Как правильно составить запрос для поиска по JSON полю в mySql?

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

    SELECT DISTINCT action.*
    FROM action
    CROSS JOIN JSON_TABLE(action.`condition`,
                          '$[*].action' COLUMNS (action INT PATH '$')) jsontable
    WHERE jsontable.action = 6


    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=c3e97c...
    Ответ написан
    Комментировать
  • Как сгрупировать значения по колонке?

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

    61239ab99d4b7647714934.png
    Ответ написан
    Комментировать
  • Ping до роутера какой должен быть?

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

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

    Для проверки, что проблемы нет - попингуй не свой роутер, а его дефолтный шлюз, который у провайдера. Там скорее всего более солидная железка, у которой ресурсов достаточно для быстрого ответа на пинги, а твой роутер будет выполнять не низкоприоритетный ответ на пинг, а высокоприоритетную маршрутизацию. Как итог - время будет чуть поболе (скажем, 2-3 мс), но без всплесков на 10 мс от обычного либо с гораздо более редкими всплесками и на меньшее значение.
    Ответ написан
    2 комментария
  • Как получить скользящее значение для дискретных данных?

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

    WITH 
    cte1 AS ( SELECT t1.ts, t1.val,
                     t2.ts ts_before, t2.val val_before,
                     t3.ts ts_after, t3.val val_after
              FROM test t1
              JOIN test t2 ON t1.ts >= TIMESTAMP(t2.ts, @delta)
              JOIN test t3 ON t1.ts <= TIMESTAMP(t3.ts, @delta) ),
    cte2 AS ( SELECT *, 
                     ROW_NUMBER() OVER (PARTITION BY ts ORDER BY ts_before DESC) rn_before, 
                     ROW_NUMBER() OVER (PARTITION BY ts ORDER BY ts_after ASC) rn_after
              FROM cte1 )
    SELECT ts,
           val,
           ts_before,
           val_before,
           ts_after,
           val_after,
           CASE WHEN val_after = val_before
                THEN val_before
                ELSE val_before + (val_after - val_before) / TIMESTAMPDIFF(SECOND, ts_after, ts_before) * TIMESTAMPDIFF(SECOND, ts, TIMESTAMP(ts_before, @delta)) 
                END val_approximated
    FROM cte2 
    WHERE ts > '2021-01-02'
          AND rn_before = 1
          AND rn_after = 1


    DEMO fiddle с некоторыми пояснениями.

    Тормозить, конечно, на большом массиве будет нещадно - так что неплохо бы ещё в первом CTE по всем трём копиям задать вменяемые границы от и до...

    Не имел дела раньше с оконными функциями в MySQL.

    А придётся. И не просто "иметь дело", а хорошо изучить, до полного понимания.
    Ответ написан
    2 комментария
  • Как удалить кортеж из массива по значению кортежа?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Поделить на элементы, отбросить ненужные, собрать обратно:
    WITH cte AS (SELECT 1 id, CAST('[12, 13, {"12": 123} ]' AS JSON) sort)
    SELECT cte.id, JSON_ARRAYAGG(jsontable.element) sort
    FROM cte
    CROSS JOIN JSON_TABLE(cte.sort,
                          '$[*]' COLUMNS (element JSON PATH '$')) jsontable
    WHERE jsontable.element != CAST('{"12": 123}' AS JSON)
    GROUP BY cte.id

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=405ff0...

    PS. Сравнение объектов JSON - занятие неблагодарное. В более сложных случаях не пройдёт, даже JSON_OVERLAPS() может не спасти. Возможно, использование строковых функций на строковом представлении JSON более правильное решение.
    Ответ написан
    Комментировать
  • Зачем нужны внешние ключи прописанные в структуре БД (MySQL) - они действительно там нужны?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Любая СУБД имеет достаточно мощную систему контроля целостности и непротиворечивости данных. Эта система работает, используя набор правил контроля, описанных в структуре БД, и жёстко следит за тем, чтобы ни одно из правил не было нарушено.

    Внешний ключ - это как раз такое правило. Сформулировано оно так: в данном поле таблицы не может храниться значение, которое не присутствует в той таблице, на которую ссылается внешний ключ (rонечно, в зависимости от конкретного текста ссылки внешнего ключа и самого поля тут возможны варианты - например, в этом поле может храниться не только значение, присутствующее в ссылочной таблице, но и NULL). И, имея такое правило, СУБД ни при каких условиях не позволит его нарушить. Любая попытка вставить запись со значением, которого нет в ссылочной таблице, приведёт к ошибке. Любая попытка изменить существующее значение на такое, которого "там" нет - приведёт к ошибке. То же касается и "второй" стороны, СУБД не позволит изменить значение в ссылочной таблице или удалить его (потому что записи в нашей таблице при этом "потеряют" ссылку) - такая попытка корректировки приведёт к ошибке.
    Ответ написан
    2 комментария
  • Как синхронизировать две mysql базы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если оба MySQL-сервера взаимно доступны, то для решения задачи можно использовать FEDERATED Storage Engine.

    На " другом сервере, где вертится аналитика самописная", перезапускаете MySQL, включив FEDERATED Engine. Далее создаёте подключение (CREATE SERVER), создаёте копию удалённой таблицы на этом сервере - и просто копируете из неё записи за последний месяц. Либо без сервера - прямо при создании таблицы указываете параметры подключения.
    Ответ написан
  • Алгоритм поиска минимального количества ходов, требуемых для приведения всех элементов к одному числу (Python)?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если количество элементов массива нечётно, то тем значением, к которому надо привести элементы, равно значению строго среднего элемента (медианы массива).

    Если количество элементов массива чётно, то в качестве конечного значения подходит любое значение между двумя средними элементами, включительно.

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

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

    Имя пользователя - задаётся пользователем при подключении. Хост (имя либо адрес) определяется сервером MySQL. самостоятельно, и на этот процесс пользователь почти не имеет возможности повлиять. Объединение этих двух частей и даст полное имя, которое будет использоваться для определения привилегий.

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

    Подробно всё это объясняется в документации в разделе Access Control and Account Management.
    Ответ написан
    Комментировать
  • Как правильно выстроить отношения и спроектировать таблицы?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Нужны ещё как минимум две таблицы.

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

    Вторая описывает связь типа много-ко-много между пользователем и первой таблицей.

    Вместе они задают, какую конкретную роль в конкретной компании имеет конкретный пользователь.
    Ответ написан
    5 комментариев
  • Как вносить в ячейку значение зависимое от даты?

    @Akina
    Сетевой и системный админ, SQL-программист.
    6113d3056202f595026259.png

    Формулы:

    G1=TODAY()-1
    G5:I5=VLOOKUP($G$1;$A$2:$D$11;COLUMN()-5;0)


    То же, если конечная таблица на другом листе:

    6113d3ba2580f247139272.png
    Ответ написан
    Комментировать