Задать вопрос
  • Как связать таблицы по одному столбцу и посчитать сумму?

    @alexalexes
    /* создание подготавливаемого запроса */
    $stmt = $mysql->prepare("select sum(c.`Price`) as price_sum
                                 from `dogovor` d
                                 join `catalog` c on c.`Id_Product` = d.`Id_Product`
                              where d.`id_client` = ?");
    /* связывание параметров с метками */
    $stmt->bind_param("i", $id_client);
    /* выполнение запроса */
    $result = $stmt->execute();
    /* выборка результатов */
    $row = $result->fetch_accos();
    if($row)
    {
      echo 'Общая стоимость всех заказов клиента: '.$row['price_sum'];
    }
    else
    {
      echo 'Запрос не дал результата!';
    }

    Ошибки в вашем решении:
    1) Небезопасная подстановка параметров в запросах. Неумение использовать в этой ситуации подготовленные запросы.
    2) Использование id_client как строкового параметра, если он состоит из цифр, то целесообразно использовать целочисленный тип в колонке таблицы.
    3) Неиспользование агрегированных функций среды sql. Зачем на php плодить лишние циклы, когда сумму можно посчитать "из коробки" средствами самой СУБД? Она под это заточена.
    4) Связывание таблиц по наименованию сущности, а не по его идентификатору. Рационально связывать по id_product вместо name_product.
    Ответ написан
    Комментировать
  • Как взять значение из одной таблицы и прибавить к значению другой таблицы?

    @alexalexes
    Вывести на просмотр:
    SELECT p.price, od.quantity,
              p.price * od.quantity as cost -- в выборке можно не только поля выбирать, но и делать любые сложные матем. операции в пределах сопоставляемых строк и агрегированных функций
    FROM products p
    JOIN orderdetails od ON p.productid = od.productid --  ну, так соединяйте по ключам. Что мешает?
    Where od.orderid = ? -- если нужно ограничиться в пределах заказа

    Применить изменения:
    update orderdetails
    set orderdetails.totalcost = ( select p.price * orderdetails.quantity
                                                    from products p
                                                  where orderdetails.productid = p.productid
                                                ) -- вычисляем цену из таблицы продуктов и изменяем ее в деталях
    where orderdetails.orderid = ? -- если нужно ограничиться в пределах заказа
    and exists (select 1
                        from products p
                        where orderdetails.productid = p.productid
                      ) -- выбираем детали заказа только по тем продуктам, которые есть в продуктах, можно добавить доп. ограничения по затрагиваемым деталям

    Можно навешать триггер на вставку, изменение таблицы orderdetails. Тогда при изменении количества, цена будет пересчитываться с помощью него автоматически.
    Основа триггера:
    update orderdetails
    set orderdetails.totalcost = ( select p.price * new.quantity
                                                    from products p
                                                  where orderdetails.productid = p.productid
                                                ) -- вычисляем цену из таблицы продуктов и изменяем ее в деталях
    where orderdetails.orderdetailid = new.orderdetailid

    PS: Если это учебная база данных, то сойдет. А если реально используется такая модель, то не хватает таблицы "Цена продукта по состоянию на".
    Ответ написан
    Комментировать
  • Вывод звука с материнской платы, минуя микшер windows. Возможно?

    @alexalexes
    Ищите Asio в каталоге с драйвером Realtek и ставьте, не обязательно, в первом же попавшемся инсталляторе он будет.
    Также есть Asio4all.
    В общем, пробуйте. Что заведется, то и используйте.
    Ответ написан
    Комментировать
  • FreeDOS 1.3. GUI с работающим хоткеем по типу alt+tab. И работает ли freedos с usb накопителями?

    @alexalexes
    А у этой железки есть какие-нибудь сетевые интерфейсы? Проще в старых версиях дос пристроить сетевой каталог (условная samba), чем оживить технологию plug and play, ее только в 6-ой версии завезли.
    Ответ написан
  • Почему происходят скачки скорости при чтении?

    @alexalexes
    Нормальный график для такого старичка.
    Буфер маленький, геометрия диска на небольших объемах даёт лаг по времени при переключении между дорожками, поэтому мелкие файлы ему чирикать медленнее, чем один большой того же объема.
    Пс: если параметры 05 и c5 в smart у этого диска по нулям, то он живее всех живых. Хотя хранить на нем что-то важное я бы уже не рискнул.
    Ответ написан
    Комментировать
  • Как изменить размер (scale) объекта используя перетаскивания в js canvas?

    @alexalexes
    Очевидно же, что не нужно использовать преобразование функции, если аргументы содержат недопустимые значения. Делайте контроль допустимых значений перед применением функции. Если аргумент один - то у вас два состояния работы функции: обычное, и вырожденное. Если два аргумента, то четыре состояния: 1) обычное по X, обычное по Y; 2) обычное по X, вырожденное по Y; 3) вырожденное по X, обычное по Y; 4) вырожденное по X, вырожденное по Y.
    Ответ написан
    Комментировать
  • Какой бюджетный набор для пайки плат можно собрать?

    @alexalexes
    Во главе угла должен стоять мультиметр (иногда осциллограф, иногда теплак + лабораторный БП) и навыки анализа электрических схем.
    Если научитесь диагностировать, то ремонт можете поручить 7-милетнему ребенку, который имеет вышеуказанный обвес. Все это влияет на качество и скорость ремонта, но бесполезно, если нечем диагностировать.
    Ответ написан
    Комментировать
  • Как переписать код на более современный JS?

    @alexalexes
    Эта пуленепробиваемая конструкция будет работать и через 100 лет. Ничего не меняйте.
    Ответ написан
    Комментировать
  • Как создать сайт с возможностью создать личный кабинет и с привязанной к нему БД?

    @alexalexes
    В вашем случае, если задание звучит именно так, то просто ставится ВордПресс, настраивается 3 роли пользователей, открывается возможность регистрации. Всё - любой пользователь может создать учётку на базе возможностей самой CMS.
    К сайту нужно подключить БД

    Если вы ставите любую CMS, это уже автоматически подразумевает, что вы провели романтическую ночь с мануалом по установке MySQL или PostgreSQL, и уже на зубок знаете какое имя пользователя вы создали в СУБД, и знаете параметры подключения к ней для сторонних клиентов, в роли которого выступит веб сервер с CMS.
    Ответ написан
    3 комментария
  • Утечёт ли заряд из SSD если его не включать полтора года?

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

    @alexalexes
    Анреал. Sqlite никогда не используется в приложениях дальше задач кеширования данных конечного пользователя, у него какое-то журналирование есть, но только в рамках поддержки транзакций.
    Плюс, у вас SSD - плюс 1 млн. очков к ачивке "удалил - забудь".
    Ну, что-ж, это урок.
    Сохраняйте вкладки в избранное, а избранное выгружайте в виде файла со списком ссылок.
    Файл версируйте, копируйте раз в несколько месяцев в разные накопители.
    Ответ написан
    Комментировать
  • Как исправить кодировку в Outlook?

    @alexalexes
    См. преобразования windows-1251 <-> KOI8-R.
    Ответ написан
  • Как загрузиться с ssd диска в разъем mini-pcie?

    @alexalexes
    Если вы не нашли готовой прошивки bios с модификацией nvme под свою материнскую плату, то такая модификация готовится самостоятельно из прошивки от производителя, и зашивается в материнку на свой страх и риск.
    PS: Вы точно в advanced или boot разделе не находили пункта Hard Disk Priority или Other devices? Обычно, в таких местах прячутся альтернативные харды.
    Ответ написан
  • Как подключить акустику через ЦАП Fosi Q4 к ПК?

    @alexalexes
    RCA-RCA, у вас нет вариантов. Такие кабели на мусорку выбрасывают пачками, есть в любом ларьке, торгующий пультами. Если найдете несколько, то достаточно того, у кого сопротивление ниже при прочих равных условиях (он толще).
    А так, надо было брать ЦАП, у которого оптический выход на out, тогда отойдете от привычных тюльпанов.
    PS: Я бы еще взглянул на характеристики материнской платы компа, вполне возможно, у нее есть SPDIF разъем, но не выведен на заднюю панель. Тогда можно обойтись вот такой штукой: https://aliexpress.ru/item/1005006476780043.html
    https://aliexpress.ru/item/1005006749094797.html
    Ответ написан
    9 комментариев
  • Как на один элемент повесить два события, клик и двойной клик?

    @alexalexes
    this.content.querySelectorAll('.cell').forEach((cell) => {
      let timer = null; // дескриптор отложенного обработчика одного клика
      cell.addEventListener('click',  (e) => {
         if(timer)
           clearTimeout(timer); // при каждом клике сбрасываем отложенный обработчик обработки одного клика
         if(e.detail == 1) // на первом клике устанавливаем отложенный обработчик
           timer = setTimeout(handleClickCell, 250); // Выполнение функции по одинарному клику после ожидания второго клика 250мс
         if(e.detail == 2) // на втором - выполнение обработчика двойного клика
         {
            // благодаря счетчику detail в ивенте можем посчитать длину очереди непрерывных кликов, и в нужный момент выполнить функцию на втором клике
            console.log('111');
         }
        } );
    });
    Ответ написан
    1 комментарий
  • В firefox не работает transition opacity?

    @alexalexes
    Я думаю, с порядком свойств transition лучше не испытывать судьбу, и ставить их в том порядке, как вы видите это в справочнике:
    transition: all 0.6s;
    По содержанию можно распарсить, какой тип свойства разработчик имел ввиду, но думаю, это не обязывает интерпретатор CSS обладать этим в функционалом. Может вы и словили этот момент в конкретном браузере.
    Ответ написан
    Комментировать
  • Будет ли доступен принтер из другой подсети?

    @alexalexes
    Asus RT-G32 или WL-520GC

    Отключаете на этих устройствах DHCP-сервер, втыкаете в него шнурок в любой lan порт (не wan!) от роутера TL-WR740N (на котором включен DHCP-сервер). Получаете точно такой же свитч, как у вас Dlink.
    Ответ написан
    1 комментарий
  • Как кучу файлов с дампами таблиц соединить в один?

    @alexalexes
    Каждая табличка - это отдельный файл SQL.

    Это не таблица, это "чертеж" таблицы.
    Соберете все файлики в несколько больших с помощью какого-нибудь файлового менеджера, то можете phpMyAdmin скармливать чертеж на постройку сразу нескольких объектов СУБД, а не только одной таблички.
    Ответ написан
    4 комментария
  • Является ли код правильным?

    @alexalexes
    (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) == 0

    Пока переменные - целые числа. Данное выражение может сработать на истину.
    Но если захотите вещественные числа применять, то придется ввести константу или переменную для сглаживания погрешности работы с числами с плавающей запятой.
    abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) <= eps

    eps - это макс. значение ошибки, при работе с числами с плавающей запятой. Очень сильно будет зависеть, в каких масштабах будут остальные переменные. Если единицы - то eps будет 0,001, если другие переменные сотни и тысячи, то эпсилон будет 0,1 (для примера привел числа, чтобы понимать масштаб).
    Ответ написан
    Комментировать
  • Как посчитать сумму значений value в колонках с одинаковым id?

    @alexalexes
    Проверьте этот вариант:
    SELECT o.id, o.variant_id, 
                /* vp.variant_id,  */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
                  vp.quantity AS quantity_result,
                sum(vp.quantity) over (partition by vp.variant_id) as sum_by_variant_id -- сумма в пределах партиции variant_id
    FROM orders AS o
    LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
    LEFT JOIN products AS p ON p.id = vp.product_id
    LEFT JOIN product_types AS pt ON pt.id = p.type_id
    /*WHERE */                               and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.

    Но скорее всего вот такой вариант пойдет:
    SELECT o.id, o.variant_id, 
                /* vp.variant_id,  */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
                sum(vp.quantity) as sum_by_variant_id -- сумма в пределах группировки o.id, o.variant_id 
    FROM orders AS o
    LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
    LEFT JOIN products AS p ON p.id = vp.product_id
    LEFT JOIN product_types AS pt ON pt.id = p.type_id
    /*WHERE */                               and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.
    group by o.id, o.variant_id /*, vp.variant_id  */

    PS: Вы уверены в применении left join? Не просто join?
    Ответ написан
    Комментировать