Задать вопрос
@agressor221
Программист новичОк

Как умножить в таблице два значения, полученный результат вывести отдельно?

У меня php скрипте динамический создается таблица в базе данных sql по данному коду:
$query ="CREATE Table IF NOT EXISTS $post_name 
(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name_prod VARCHAR(200) NOT NULL,
    amount double NOT NULL,
    summ double NOT NULL,
    summ_num double NOT NULL,
    data_p VARCHAR(200) NOT NULL,
    status VARCHAR(200) NOT NULL
)";

Необходимо, чтобы в столбце summ_num формировалась значение amount * summ.
  • Вопрос задан
  • 1177 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
trapwalker
@trapwalker
Программист, энтузиаст
Вы не написали о какой БД идёт речь.
Некоторые поддерживают вычисляемые поля. Значение такого поля не хранится в БД, оно вычисляется в процессе запроса "ленивым" образом незаметно, а для SQL выглядит как обычное поле.

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

Однако я вам рекомендую не поддаваться на все эти соблазны и не хранить никакого кода в БД. Если вы прямо в SQL-запросах каждый раз будете перемножать эти величины, когда это нужно, то ничем это решение не будет менее эффективным чем предыдущие два. Формула у вас не так сложна и вполне очевидна, чтобы не наворачивать лишних сущностей.

Первое решение ищется по строке "%my_db% calculated fields"/
Второе: "%my_db% trigger on update"
Третье и гуглить не надо. Просто умножайте всегда.
Ответ написан
Комментировать
@agressor221 Автор вопроса
Программист новичОк
Спасибо, решил самостоятельно!
Нашло решение при выводе данных подобным методом:

$query2 ="SELECT SUM(summ*amount) AS summ_num FROM $name WHERE 1";
Ответ написан
Комментировать
@Senarest
Разработчик C#
$query ="CREATE Table IF NOT EXISTS $post_name 
(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name_prod VARCHAR(200) NOT NULL,
    amount double NOT NULL,
    summ double NOT NULL,
    summ_num double AS (amount*summ),
    data_p VARCHAR(200) NOT NULL,
    status VARCHAR(200) NOT NULL
)";
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы