Задать вопрос
  • Как c помощью bat-файла открыть все ссылки в браузере из одной папки на рабочем столе?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Что-то типа такого:
    FOR %%x IN ("x:\folder\*.url") do browser.exe %%x
    Ответ написан
    Комментировать
  • Как разбить одну таблицу на две и правильно заполнить её данными из импорта?

    @Akina
    Сетевой и системный админ, SQL-программист.
    CREATE TABLE client ( clientid INT AUTO_INCREMENT PRIMARY KEY,
                          firstname VARCHAR(255),
                          lastname VARCHAR(255),
                          phone BIGINT,                           -- если исходный VARCHAR - поменять, 
                                                                  -- либо соотв. преобразование в INSERT
                          UNIQUE (firstname, lastname, phone) );  -- можно потом удалить
    
    INSERT INTO client (firstname, lastname, phone)
        SELECT DISTINCT firstname, lastname, phone
        FROM orders_old;
    
    CREATE TABLE order ( orderid INT AUTO_INCREMENT PRIMARY KEY,
                         ordernumber INT,
                         clientid INT,
                         FOREIGN KEY (clientid) REFERENCES client (clientid) );
    
    INSERT INTO order (ordernumber, clientid)
        SELECT orders_old.ordernumber, client.clientid
        FROM orders_old
        JOIN client USING (firstname, lastname, phone);

    NOT NULL - по вкусу.
    Ответ написан
    1 комментарий
  • Как в PosgreSQL, в JSON добавить key:value?

    @Akina
    Сетевой и системный админ, SQL-программист.
    https://www.postgresql.org/docs/current/functions-...

    Оператор конкатенации JSONB - ||

    В более сложных случаях - jsonb_set(), jsonb_insert()... в общем, посмотри сам.
    Ответ написан
    Комментировать
  • Что конкретно делает wi-fi wi-fi'ем?

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

    Соответствие стандарту.
    В первую очередь, наверное, такие характеристики как набор рабочих частот и протокол канального уровня.
    Ответ написан
    Комментировать
  • Как правильно конвертировать SQL дату, чтобы корректно принять и отправить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Хранить следует в формате для хранения даты (с учётом необходимости дополнительного хранения информации о зоне времени). Если СУБД имеет встроенный тип DATE - следует использовать его. Если такого нет - DATETIME. Если и такого нет - TIMESTAMP.

    Вводить следует в том формате, в каком согласно документации следует представлять литералы даты.
    Ответ написан
    Комментировать
  • Как задать поиск по совпадения в 2 и более слов?

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

    Нет. Вернее, этого недостаточно.
    Условие WHERE name LIKE '%сок%перс%', конечно, не пропустит указанные нежелательные записи - но и "Персиковый сок" тоже будет отброшен.

    Нужно проверять наличие каждого слова отдельно.

    SELECT *
    FROM table
    WHERE name LIKE '%сок%'
      AND name LIKE '%перс%';
    Ответ написан
    Комментировать
  • Как получить сумму стоимости товаров из массива json?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT test.id, SUM(jsontable.price) total_price
    FROM test
    CROSS JOIN JSON_TABLE(test.data,
                          '$.products[*]' COLUMNS (price INT PATH '$.price')) jsontable
    GROUP BY test.id

    fiddle
    Ответ написан
    Комментировать
  • Как выбрать нужные позиции в базе по датам?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT *
    FROM tablename
    WHERE data < CURRENT_DATE + INTERVAL 5 DAY
    -- AND data >= CURRENT_DATE
    Ответ написан
    Комментировать
  • Как добавить данные для каждого массива в трехмерным массиве PHP?

    @Akina
    Сетевой и системный админ, SQL-программист.
    $db->prepare("SELECT comments.id, ... , users.login
                       , :me AS me 
                  FROM `comments` ... ");
        $comments->execute([
        "id_post" => $dataAttr,
        "me" => $_SESSION["user"]["id_user"],
        ]);

    или типа того...
    Ответ написан
    1 комментарий
  • Как выбрать дату последней транзакции (чтоб эта транзакция была 7 дней назад)?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT id AS servie_id,
           name AS servie_name,
           MAX(TO_TIMESTAMP(created_at))::DATE AS last_trans_date
    FROM services
    GROUP BY 1,2
    HAVING last_trans_date <= CURRENT_DATE - INTERVAL '7 day'
    Ответ написан
    Комментировать
  • Где ошибка в EXECUTE FORMAT?

    @Akina
    Сетевой и системный админ, SQL-программист.
    CREATE OR REPLACE FUNCTION _Foo2(st TIMESTAMP, fin TIMESTAMP)
    RETURNS TABLE (out_key INTEGER, out_tst timestamptz, out_val FLOAT) AS $$
    DECLARE  
      
    BEGIN
    
      RETURN QUERY EXECUTE FORMAT('
      SELECT %I, %I, %I
      FROM %I 
      WHERE %I BETWEEN ''%s'' AND ''%s'';
      ', 
      'in_key', 'in_tst', 'in_val', 'in_table', 'in_tst', st, fin);
    
    END;
    
    $$ LANGUAGE plpgsql;


    DEMO fiddle

    Ошибки найдёте самостоятельно...
    Ответ написан
    1 комментарий
  • Как исправить ошибку Cannot add or update a child row: a foreign key constraint fails?

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

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

    Согласно ограничению то значение, которое ты вставляешь в поле dispatcher таблицы transportation в базе данных auto, уже должно существовать в поле id_dispatcher таблицы dispatcher той же базы.

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть минимум два варианта.
    Первый - предпочтительный, но ссылку на него уже дал datka.
    Второй - откорректировать шаблон по умолчанию. См. тут
    Ответ написан
    Комментировать
  • Как удалить все в строке после последнего пробела через Notepad++?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Найти: +[^ ]+$ (в начале перед плюсом один пробел)
    Заменить: (пустая строка)

    Режим - регулярные выражения, зацикленный поиск.

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

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

    Соответственно "справочник дат" - дурь, не имеющая права на существование.

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

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

    INSERT IGNORE преобразует ошибку в предупреждение. При этом выполнение запроса продолжается, а запись, попытка вставки которой привела к ошибке, не вставляется.

    Замечание. Дублирование - не единственное событие, которое может вызвать ошибку. Может быть ещё куча причин (CHECK constraint, SIGNAL из триггера, нарушение внешнего ключа и т.п.). Причём далеко не все типы ошибок восстановимы и могут быть проигнорированы/преобразованы в предупреждение. Если ошибка невосстановимая (как правило, это системные или внешние ошибки) - запрос прерывается по ошибке и откатывается обычным образом.

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

    Нужно игнорировать дублирующиеся данные. Буду делать INSERT IGNORE

    Кроме INSERT IGNORE INTO есть ещё два типа запросов, которые обрабатывают ошибку дублирования данных - это INSERT .. ON DUPLICATE KEY UPDATE и REPLACE INTO. Изучите их - возможно, какой-то из них лучше подходит для Вашей конкретной задачи. При этом REPLACE не поддерживает модификатор IGNORE и не может игнорировать другие ошибки.
    Ответ написан
    2 комментария
  • #1045 - Доступ закрыт для пользователя 'root'@'127.0.0.1', что делать?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В OpenServer -> PHPMyAdmin я создал юзера root1

    Мало создать юзера, надо ещё дать ему необходимые для работы права. Хотя бы элементарно на чтение для той БД, которая указана как база по умолчанию.

    Вот параметры юзера

    Право USAGE - это синоним права “no privileges”. Т.е. свежесозданный юзер - абсолютно бесправен.

    Читайте и применяйте GRANT Statement. Особое внимание обратить на WITH GRANT OPTION.
    Ответ написан
    Комментировать
  • Как заставить работать COUNT с GROUP BY?

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

    Вариантов несколько.

    Первый, наиболее правильный - получить это значение отдельным запросом.
    SELECT COUNT(*)  AS cnt
    FROM (
        SELECT 1
        FROM "order" AS o
             LEFT JOIN product p ON (p.order_id = o.id)
        GROUP BY o.id
        HAVING sum(p.price) >= 10
    ) x


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

    Третий - добавить соотв. поле в каждую запись выходного набора, используя оконную функцию, и взять значение из любой записи:
    SELECT o.id, COUNT(o.id) OVER () AS cnt
    FROM "order" AS o
             LEFT JOIN product p ON (p.order_id = o.id)
    GROUP BY o.id
    HAVING sum(p.price) >= 10
    Ответ написан
  • Как объединить два запроса в один?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT order.ID, 
           order_status.Name StatusName, 
           order.Name OrderName, 
           order.Phone
    FROM order
    JOIN order_status ON order.status = order_status.id

    Если соответствие в таблицах задано иначе - исправь ON clause.
    Ответ написан
    2 комментария
  • Агрегирование в контексте группы и оконной функции?

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

    Именно так и будет. Считай, что оконные функции работают после HAVING и перед ORDER BY.
    Ответ написан
    Комментировать