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

Рейтинг: 0Ответов: 3Опубликовано: 10.12.2014

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

function edit_price() {
    global $connection;
    $query = "SELECT dolar FROM kurs";
    $query = "UPDATE `goods` SET `price` = `price` * `dolar`";
    $res = mysqli_query($connection, $query) or die (mysqli_error());

    if (mysqli_affected_rows($connection) > 0) {
        $_SESSION['answer'] = "<div class='success'>Все цены товаров успешно обновлены!</div>";
        return true;
    } else {
        $_SESSION['edit_kurs']['res'] = "<div class='error'>Ошибка!</div>";
        return false;
    }
}

Помогите, пожалуйста.

Решил таким образом:

function edit_kurs() {
    global $connection;
    $dolar = (int) $_POST['dolar'];
    if (empty($dolar)) {
        // если поле пусто
        $_SESSION['edit_kurs']['res'] = "<div class='error'>Введите курс доллара в цифрах!</div>";
        return false;
    } else {
        if ($_POST) {
            $new_kurs = $_POST['dolar'];
        }
        $query = "UPDATE  goods, kurs  
        SET goods.price = (goods.price / kurs.dolar) * $new_kurs,
                kurs.dolar = $new_kurs ";
        $res = mysqli_query($connection, $query) or die (mysqli_error());
        if (mysqli_affected_rows($connection) > 0) {
            $_SESSION['answer'] = "<div class='success'>Страница обновлена!</div>";
            return true;
        }
    }
}

Ответы

▲ 2Принят

Если тебе надо пересчитать данные в таблице, то вот так (данные в таблице будут перезаписаны):

UPDATE goods,kurs SET goods.price = goods.price*kurs.dolar

это при условии, что в kurs всего одна строка и несколько полей:

euro | dolar | .... | krona
20   |   16  | .... |  10

Обновление

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

$query = "UPDATE goods,kurs SET goods.price = (goods.price/$old_kurs)*kurs.dolar"

Если цены пересчитывать во время смены курса, то можно так:

$query = "UPDATE  goods, kurs  
  SET goods.price = ( goods.price / kurs.dolar )*$new_kurs ,
kurs.dolar =$new_kurs"
▲ 3

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

Таблица kurs
period      | valuta| cost
10.12.2014     1        55.58
10.12.2014     2        65.58
09.12.2014     1        54.58
09.12.2014     2        64.58

Поле валюта - содержит id валюты из другой таблицы

Запрос - получить курс на указанную дату в примере на '2014-12-10' В запросе выбираются все поля - что не нужно уберешь

SELECT period, valuta, cost
FROM kurs
RIGTH JOIN
(
    SELECT max(period) as maxperiod, valuta as tvaluta
    FROM ostatki
    WHERE period<='2014-12-10'
    and valuta=' id нужной валюты'
    GROUP BY valuta //если идет запрос конкретной валюты - это можно убрать, если запрос курсов нескольких валют это оставить
) as tp
on period=maxperiod and valuta=tvaluta
▲ 2

Вставить вложенный SELECT можно. Типа SET price=price*(SELECT kurs FROM kurses WHERE date=NOW() ORDER BY time DESC LIMIT 1). Должно заработать.