Задать вопрос
  • Как найти начальную точку для определения маршрутов в двумерном массиве?

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

    Ну так найдите начало (если оно гарантированно есть) или кандидата (если таковых несколько или может не быть).
    То есть просто ищите значение(я), которое присутствует в первом элементе пары, но отсутствует во втором по всему массиву.

    Применительно к показанному массиву - только значение USA соответствует описанному условию.

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

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

    Задача не решается вычисляемым полем - в его выражении не допускается недетерминированных конструкций.

    Для решения задачи потребуется:
    1) trigger, который обработает начальные условия
    2) event procedure, которая обработает изменение значения по наступлении заданного момента времени

    Однако условия на формирование значения поля:

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

    Ну и, как правильно предлагает Константин Цветков, разумнее не изменять данные в таблице, а рассчитывать актуальный статус в момент, когда он требуется.
    Ответ написан
  • Как составить запрос на экспорт таблицы БД?

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

    Возможное решение - UNION ALL двух запросов. Первый - получающий список полей таблицы из INFORMATION_SCHEMA.COLUMNS в виде CSV, второй - собственно показанный запрос. Поскольку UNION ALL не перемешивает выходные записи, получится вроде бы то, что нужно.

    Однако есть грабли. Невидимые вычисляемые столбцы. Они будут присутствовать в списке полей, но не в наборе данных.

    См. fiddle
    Ответ написан
    Комментировать
  • Что нужно знать и куда смотреть чтобы заменить домашний оптический роутер на другой?

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

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    UPDATE TableA 
    SET tableB_Id = TableB.Id
    FROM TableB
    WHERE TableA.Name = TableB.Name;


    fiddle
    Ответ написан
    Комментировать
  • Зависит ли скорость записи в БД от количества в ней записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Меняется/Зависит ли как-то скорость записи в таблицу БД от количества записей в таблице?

    В общем случае нет. Есть факторы, кроме количества записей в таблице, которые влияют на скорость записи гораздо сильнее.

    2. Меняется/Зависит ли как-то скорость записи в таблицу БД от количества таблиц в БД?

    В MySQL - нет.

    3. Меняется/Зависит ли как-то скорость записи в таблицу БД от количества записей в соседних таблицах БД?

    В MySQL - нет. За исключением случая, когда пополняемая таблица имеет внешний ключ на другую таблицу. Но и в этом случае есть факторы, которые влияют на скорость записи гораздо сильнее.

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT address, 
           office, 
           t1.fio, 
           t2.counter, 
           CASE t2.counter
               WHEN 'counter1' THEN t1.counter1
               WHEN 'counter2' THEN t1.counter2
               WHEN 'counter3' THEN t1.counter3
               END value,
           t2.num,
           t1.date       
    FROM table1 t1
    JOIN table2 t2 USING (address, office)
    Ответ написан
    2 комментария
  • Как узнать с каких интерфейсов в cisco куда идут кабеля?

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

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

    Берём ноут либо планшет с сетевухой (USB). Втыкаемся в розетку или коммутатор. Смотрим в ARP в интерфейсе сиськи, на каком порте находится МАС сетевухи.

    А ещё есть генераторы, которые "свистят" в кабель. И к ним щуп, который определяет наличие этого "свиста" в кабеле либо розетке. Но это либо вдвоём, либо много бегать.
    Ответ написан
    2 комментария
  • Почему не работает функция CURRENT_DATE() в триггере?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Почему не работает функция CURRENT_DATE() в триггере?

    Где-то что-то криво делаешь. У меня - работает.

    Хотя с моей точки зрения - у тебя кривая таблица. Нафига нужен триггер, если существует такая штука как "значение по умолчанию"?

    CREATE TABLE Sotrudnik (
      .....
      Date_Prinyatiya DATE DEFAULT (CURRENT_TIMESTAMP),
      .....
    );

    FIDDLE

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    rundll32.exe keymgr.dll, KRShowKeyMgr
    Ответ написан
  • Как присвоить одному сайту разный IP?

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

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

    Как сделать так что бы при вводе другого IP адреса с другой подсети пользователь попадал на сайт 10.2.2.10?

    Если вопрос ставить ИМЕННО ТАК - то либо использовать destination NAT в варианте DMZ, либо socks proxy.

    Любые остальные решения подходят только в случае, когда будут чётко определены конкретные протоколы и, для TCP/UDP - порты. И когда будет чётко и однозначно определено, что скрывается под загадочным термином "попадать".
    Ответ написан
    Комментировать
  • Почему при выборке первых трех строк, MySQL просматривает все записи таблицы?

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


    Таков принцип работы у этой СУБД. MySQL сначала выбирает все соответствующие условиям отбора записи, и только потом применяет к ним ограничение количества. Правда, обычно в запросе ещё присутствует и сортировка.

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

    Мне возвращается первые 3 строки.

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

    Вот, полюбопытствуйте: FIDDLE. Кстати, забавно, что без хинта оптимизатор выбирает вовсе даже не первичный индекс... Более того, в данном конкретном случае этому есть совершенно точное и строгое объяснение - попробуйте его найти.
    Ответ написан
    Комментировать
  • Какой тип файла выбрать для проекта?

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

    Такое однозначно требует plain text.

    Во-первых, всё должно быть максимально просто. Соответственно про бинарные, а тем более проприетарные, форматы - забудь.
    Во-вторых, уж редактор, а тем более вьювер, для текстовых файлов сейчас можно найти даже в утюге. Лишь бы он после импорта и редактирования текста не стремился сохранить результат в своём хитровыделанном формате.
    В третьих, чтобы при редактировании не соблюсти простейший текстовый формат, надо быть полным [censored].

    Соответственно первый кандидат на формат - это CSV/TSV. Я за CSV с горизонтальным выравниванием при выводе (но игнорированием его при обратной загрузке), при обязательном требовании обрамления значений символом двойной кавычки. С соблюдением такого формата при редактировании справится и обезьяна.
    Второй кандидат - это текстовые форматы сериализации (JSON, XML и т.п.). Но там сложнее соблюдать формат при редактировании.
    Ответ написан
    4 комментария
  • Что и как присваивает номера vlan для подсетей?

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

    Вот честно - слышал, но никогда не мог понять. Как по мне - хрень голимая. Качественное документирование куда как полезнее.

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

    понятно ограничение на количество vlan на разном оборудовании

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

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

    Первый - одна таблица и NULL в полях, отсутствующих у конкретного типа, её описывает Сергей Соловьев, вариант 2.
    Второй - использование EAV. Удобно, динамично, но проблемы с производительностью. Хотя из всех паттернов для реляционных СУБД он походу наиболее применим для фасетного поиска.
    Третий - использование сериализованного формата хранения. Например, хранение свойств объекта в формате JSON. Но, поскольку требуется поиск по атрибутам, в этом случае необходимо будет использовать внешний поисковый движок, возможно, даже ориентированный на фасетный поиск, или будет ужас как медленно.

    Использование MongoDB на описанном материале (буквально пара типов объектов) мне кажется не очень соответствующим решением. Хотя зависит от планируемого объёма данных.
    Ответ написан
    Комментировать
  • Почему не получаются значения NEW в триггере BEFORE UPDATE?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Для всех полей, которые не указаны явно в запросе на добавление (то есть поля явно перечислены в предложении INSERT, но это не все поля таблицы, есть неупомянутые в списке поля), в шаблон вставляемой записи помещается указанное в структуре таблицы значение по умолчанию. Если таковое отсутствует, то в шаблон помещается NULL.

    Поле-автоинкремент не имеет значения по умолчанию. Генерация нового автоинкрементного значения производится после выполнения всех BEFORE триггеров. Отсюда и NULL в указанной ситуации.

    PS. https://xyproblem.info/
    Ответ написан
  • Как сделать запись в mysql с проверкой на уникальность с учётом времени из поля?

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

    - исходная таблица:
    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      username VARCHAR(100),
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );


    - триггер:

    CREATE TRIGGER tr_users_bi
    BEFORE INSERT ON users
    FOR EACH ROW
    BEGIN
      DECLARE allowed_created_at DATETIME;
      DECLARE error_message_text VARCHAR(64);
      SELECT MAX(created_at) + INTERVAL 12 HOUR INTO allowed_created_at
      FROM users
      WHERE username = NEW.username;
      IF NEW.created_at < allowed_created_at THEN
        SET error_message_text = CONCAT('Регистрация возможна не ранее ', allowed_created_at);
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_message_text; 
      END IF;
    END


    DEMO fiddle

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

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


    Никак НЕ РЕАЛИЗОВЫВАТЬ.

    Оставь автоинкремент в покое - он обязан обеспечивать только уникальность, и не более. Нужна непрерывная нумерация? Создай для неё ОТДЕЛЬНОЕ поле, и нумеруй программно. Триггеры в помощь.
    Ответ написан
    4 комментария
  • Как защитить данные от повреждения при INSERT?

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

    НЕТ.

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

    Повреждение БД - это физическое либо логическое разрушение базы данных. Физически - например, битый сектор в теле файла таблицы. Логический (с точки зрения БД, потому как с точки зрения аппаратуры это очень даже физическое) - например, неправильное считывание номера блока данных в файле индекса вследствие наличия на диске слабого бита.

    При отсутствии аппаратных ошибок, на чистой логике повреждение БД возможно либо из-за ошибочного/злонамеренного действия, либо из-за бага/сбоя программного обеспечения. В обоих случаях - как внутри SQL-сервера, так и снаружи (ОС, третий софт, ...).
    Ответ написан
    Комментировать
  • Можно ли составить mysql запрос с выборкой не определенного множества полей?

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

    1; Ручка; Цвет; Синий; Цена; 10
    2; Нож; Материал; Цена; 200; Рукоятка; Дерево; Фото; Есть;

    Приведённый хреново форматированный текст не позволяет понять, где какое поле, и какой в нём тип данных.

    Полное ощущение, что автору требуется куча колонок (в смысле полей в структуре выходного набора). ТО есть если свойство одно, полей 4, если свойств 2, полей 6, и так далее...

    Если так, то требуемый результат называется "сводная таблица" (pivot table). Это совсем даже не реляционная структура, у которой нет и тени шанса попасть в стандарт, а потому практически ни одной СУБД штатно не поддерживается. Из популярных оно есть исключительно в SQL Server, да и там скорее исторически сложилось, чем нужно было.

    В MySQL / MariaDB ничего подходящего нет. И если кому оно реально необходимо, приходится возиться руками - хранимая процедура, динамический код... хотя на порядок разумнее оставить данные в EAV, а сводную таблицу строить на клиенте на его сервисе отчётов.

    Если же устроит выдача всех свойств, собранных в одно сериализованное поле (например, объект JSON) - то это обычная группировка и агрегация.
    Ответ написан
    Комментировать