За последние 24 часа нас посетили 17555 программистов и 1728 роботов. Сейчас ищет 1481 программист ...

Вложенный запрос

Тема в разделе "MySQL", создана пользователем passkal, 9 фев 2022.

  1. passkal

    passkal Новичок

    С нами с:
    9 фев 2022
    Сообщения:
    2
    Симпатии:
    1
    Приветствую.
    Подскажите возможно ли сделать такой запрос, чтобы в одной таблице в одном столбце суммировать данные в двух строках и результат записать в третью строку.
    Суммировать total = delivery + price WHERE order = 36
    • id___order____name____value
    • 1_____36_____delivery____35
    • 2_____36_____price_______16
    • 3_____36_____total________0
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Не пытайся превратить БД в электронную таблицу. Доверь базе делать то, что она умеет хорошо — работать с множествами. А размещение результатов так, чтобы они выглядели хорошо доверь HTML, PHP и JS.

    Короче, логично было бы хранить price и delivery в колонках, а сумму двух колонок вычислять в процессе чтения.
    Код (Text):
    1. SELECT delivery, price, (delivery + price) AS total FROM orders
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Если странные желания не оставляют тебя, сделай заготовку с исходными данными на db-fiddle.com чтобы нам не приходилось делать черновую работу. Ссылку брось в тему.
     
    passkal нравится это.
  4. passkal

    passkal Новичок

    С нами с:
    9 фев 2022
    Сообщения:
    2
    Симпатии:
    1
    Спасибо За ответ, пока ждал одобрения сообщения, вопрос разрешился с помощью подсказок на другом форуме.
    Что касается таблицы, это не моё творение, это таблица весьма распространённого движка интернет магазина OpenCart, поэтому приходится иметь то что имеем.

    само решение такое:
    PHP:
    1. UPDATE my_table
    2.   SET VALUE = (SELECT SUM(m2.Value) FROM (SELECT m1.Value FROM my_table m1 WHERE m1.name<>'total' AND m1.`order`=37) m2)
    3.   WHERE name='total' AND `order` = 37
    * где 37 - номер заказа, в готовом решении подставляется из переменной.
     
    artoodetoo нравится это.
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.839
    Симпатии:
    651
    Мускул поддерживает «суперагрегацию». См. WITH ROLLUP
     
    artoodetoo нравится это.