Задать вопрос
  • Как максимально надёжно скрыть свой IP адрес?

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

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

    Если комп подключен через коммутаторы - согласен с предыдущим оратором. Довести до роутера в отдельном VLAN. А дальше опять изоляция порта.
    Ответ написан
    3 комментария
  • Как в таблицу sql с 4 столбцами вставить список значений, в котором может быть меньше 4х значений?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Пример реализации, когда показанный список передаётся в запрос как один (многострочный) строковый литерал @list:

    INSERT INTO test (a,b,c,d)
    SELECT a,b,c,d
    FROM JSON_TABLE(
      CONCAT('[', REPLACE(REPLACE(@list, '(', '['), ')', ']'), ']'),
      '$[*]' COLUMNS (
        a INT PATH '$[0]',
        b INT PATH '$[1]',
        c INT PATH '$[2]',
        d INT PATH '$[3]'
        )                   
      ) jsontable

    DEMO fiddle

    Если данные на вставку лежат в файле - есть функция LOAD_FILE (не забыть GRANT FILE).
    Если данные передаются из языка/фреймворка - разумнее прямо там создать JSON и не париться с CONCAT и REPLACE.
    Если NULL не устраивает - добавить COALESCE.
    Ответ написан
    Комментировать
  • Как правильно совместить DELETE и LEFT JOIN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Синтаксис Firebird в принципе не предусматривает многотабличного удаления. Никаких JOIN - это не MySQL. Нужно фильтровать записи - добро пожаловать в мир коррелированных подзапросов и [NOT] EXISTS.

    Руководство по языку SQL для Firebird 2.5, страница 246.
    Ответ написан
    Комментировать
  • Как сгруппировать ответ?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH
    cte1 AS (
      SELECT jsonb_build_object('name',   users.name, 
                               'value',  comments.value,
                               'rating', comments.rating) single_user,
             comments.order_id,
             'comment' || ROW_NUMBER() OVER (PARTITION BY comments.order_id ORDER BY comments.id) num
      FROM users
      JOIN comments ON users.id = comments.user_id
    ),
    cte2 AS (
      SELECT jsonb_build_object('order_id', order_id) ||
             jsonb_object_agg(num, single_user) single_order
      FROM cte1
      GROUP BY order_id
    )
    SELECT jsonb_agg(single_order) final_data
    FROM cte2;

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

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

    Например, строка {0, 0, 1, 5, 0, 7, 0, 0} превратится в {-1, -1, 1, 5, 0, 7, -1, -1}.

    Всё. Теперь все оставшиеся в массиве нули - это окна.
    Ответ написан
    2 комментария
  • Какая максимальная скорость LAN портов у роутера при одновременном подключении к ним устройств?

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

    Типичное "у меня в подполе происходит стук".

    Да фиг знает... смотря как именно тестировать.

    Если перевести роутер в режим моста, поотключать все внутренние обработки трафика в нём, и тестировать парно WAN <-> LAN1 и LAN2 <-> LAN3, то скорее всего все 4 тестера покажут скорость, близкую к гигабиту. Если тестировать (LAN1, LAN2, LAN3) <-> WAN, опять же всё отключив, то на WAN-порте тестер покажет что-то порядка гигабита, а тестеры на LAN-портах втрое меньше (причём что а) поровну б) стабильно - не гарантировано). Если каждый тестер будет гонять трафик на все остальные три тестера/порта - то в среднем будет по 300 мбит на парный линк и порядка гигабит суммарно на узел.

    А если роутер оставить именно в режиме роутера, то очень трудно предсказать, что получится, насколько производительна программная обработка трафика. И эта производительность критично зависит от задействованных в роутере программных сервисов...
    Ответ написан
    Комментировать
  • Когда сбрасывается global transaction isolation?

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

    Чтобы навсегда - нужно внести изменения в файл опций (my.ini) либо установить соотв. опцию в командной строке сервиса. Можно также использовать SET PERSIST (значение записывается в файл опций mysqld-auto.cnf).

    См. SET Syntax for Variable Assignment - там это описано более подробно.
    Ответ написан
    1 комментарий
  • Как отсортировать массив?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT name, `text`
    FROM product
    JOIN product_attribute USING (product_id)
    JOIN attribute_description USING (attribute_id)
    -- JOIN attribute USING (attribute_id)   -- таблица в запросе не нужна
    GROUP BY 1, 2
    HAVING COUNT(*) > 1;

    fiddle

    Если нужна именно сортировка как в эталоне - ну добавить ORDER BY MAX(attribute_id)

    Таблица attribute потребуется лишь в случае, если данные из неё нужны (например, в запрос добавится отбор по значению attribute_group_id).

    Если надо сравнивать атрибуты у более чем 2 товаров, то соотв. образом откорректировать условие пост-отбора. Например, для 3 товаров и атрибутов, имеющихся у всех трёх, это будет HAVING COUNT(*) = 3
    Ответ написан
  • Как упорядочить id записей в MySQL?

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

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

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

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

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

    Правильно:

    SELECT "Items"."itemId", sum(price) / sum( sum(price) ) OVER ()
    FROM "Items"
    INNER JOIN "Purchases" USING("itemId")
    GROUP BY "Items"."itemId"


    Т.е. оконная функция применяется не к исходному полю, а к агрегатной функции.
    Ответ написан
    2 комментария
  • Как исправить ошибку 1366 Incorrect string value?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Либо изменить кодировку поля, либо выполнить преобразование кодировки значения в запросе функцией CONVERT().
    Ответ написан
  • Как убрать кавычки из ответа sql запроса с json?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT DISTINCT value::jsonb->>'name_level_1'
    ...
    Ответ написан
    Комментировать
  • Как конвертировать уже существующие записи в другую кодировку?

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

    Нужно потому что, в некоторых записях присутствуют некорректные символы.

    Это безнадёжное занятие - данные УЖЕ повреждены.

    В общем случае напрямую изменить кодировку поля нельзя - текущее значение может оказаться невалидным в новой кодировке. Следует создать новое поле с нужной кодировкой, после чего перезалить данные из неповреждённого источника. В крайнем случае - скопировать с преобразованием кодировки (функция CONVERT). Можно сделать это и на месте - сменить тип данных на BLOB, преобразовать кодировку, сменить тип данных на нужный.

    Но в описанном случае можно выполнить изменение кодировки напрямую - UTF8MB3 есть подмножество UTF8MB4, и при смене кодировки опасности ошибки невалидного значения нет. DEMO fiddle. Впрочем, некорректные символы никуда не денутся.

    ===========================

    Столбец name из кодировки utf8mb3_general_ci в utfmb4_general_ci

    Это - не кодировки. Это COLLATION - набор правил сортировки символов.
    Ответ написан
  • Replace\CAST\ISNULL как применить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT CASE WHEN [column] IS NULL
                THEN 'sale'
                WHEN CHARINDEX([column], '.') > 0
                THEN LEFT([column], CHARINDEX([column], '.') - 1)
                ELSE [column] 
                END AS [column] 
    FROM source_table;


    как есть 2-я таблица с такимеже значениями только без .0 и без NULL . А мне в дальнейшем нужно сравнить эти 2 таблицы


    Соответственно
    SELECT *
    FROM table1
    JOIN table2 ON table1.[column] = CASE WHEN table2.[column] IS NULL
                                          THEN 'sale'
                                          WHEN CHARINDEX(table2.[column], '.') > 0
                                          THEN LEFT(table2.[column], CHARINDEX(table2.[column], '.') - 1)
                                          ELSE table2.[column] 
                                          END;
    Ответ написан
    Комментировать
  • Как написать SQL запрос, чтобы при нахождении одной записи с определенным значением поля, другие записи с таким же значением не выводились?

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

    SELECT article_id
    FROM tag2article
    GROUP BY article_id
    HAVING !SUM(tag_id = 1)


    Подобный подход позволяет формировать условия любой степени сложности, например:
    SUM(tag_id = 2) -- наличие тега 2 обязательно
    SUM(tag_id IN (3,4)) -- наличие хотя бы одного из указанных тегов обязательно
    !SUM(tag_id IN (5,6)) -- отсутствие любого из указанных тегов обязательно
    SUM(tag_id IN (7,8)) = 1 -- обязательно наличие строго одного из двух указанных

    Ну и так далее... а с учётом того, что такие условия объединяются логическими операторами, можно состряпать фильтр практически любой сложности.

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT `id`, 
           (SELECT COUNT(*) FROM `table2` WHERE `id` = table1.id)  AS `count` 
    FROM `table1` 
    WHERE ....;
    Ответ написан
  • Как указать организацию в ip адресе?

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

    Эта информация интерпретируется приблизительно такой фразой: "На текущий момент этот IP адрес дали подержать вон той организации".

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

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

    Если между местом планируемой установки коммутатора и микротиком есть (или можно проложить) два кабеля, а коммутатор управляемый - да, можно. Впрочем, в этом случае коммутатор как бы и не нужен.

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

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    -- ...
    CASE WHEN Rx <  10 THEN SET Rx= 10, Rz=Rz+1;
         WHEN Rx <  50 THEN SET Rx= 50, Rz=Rz+2;
         WHEN Rx < 100 THEN SET Rx=100, Rz=Rz+3;
         WHEN Rx < 150 THEN SET Rx=150, Rz=Rz+4;
         WHEN Rx < 200 THEN SET Rx=200, Rz=Rz+5;
         ELSE LOOP 
              END LOOP;
    END CASE;
    -- ...
    Ответ написан