За последние 24 часа нас посетил 34171 программист и 1314 роботов. Сейчас ищут 950 программистов ...

Как сложить значения нескольких столбцов из разных таблиц...

Тема в разделе "PHP и базы данных", создана пользователем eldor, 27 дек 2014.

  1. eldor

    eldor Активный пользователь

    С нами с:
    3 май 2013
    Сообщения:
    202
    Симпатии:
    20
    Здравствуйте! Я целый день ломаю голову над такой задачей: есть 2 таблицы t1 и t2. Столбцы в t1: id_t1, number1_t1, number1_max_t1, а в t2: id_t2, id_t1_t2, number2_t2.
    Мне нужно обновить number1_t1, при условии, что number1_t1 больше number1_max_t1+(сумма number2_t2 одного пользователя - через id_t1_t2).
    Я пробовал по-разному - вот один из неудачных примеров:
    UPDATE `t1` SET `number1_t1`=`number1_max_t1` WHERE `number1_t1`>`number1_max_t1` + (SELECT SUM(`number2_t2`) FROM `t2` WHERE `id_t1`= `id_t1_t2` GROUP BY `id_t1_t2`)

    Подскажите, пожалуйста, как решить данную задачу?
     
  2. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Re: Как сложить значения нескольких столбцов из разных табли

    Изучайте JOIN SQL
    http://www.site-do.ru/db/sql6.php
     
  3. eldor

    eldor Активный пользователь

    С нами с:
    3 май 2013
    Сообщения:
    202
    Симпатии:
    20
    Re: Как сложить значения нескольких столбцов из разных табли

    За наводку спс.
    С JOIN немного разобрался. Возникла другая проблема вот в этом месте: SELECT (`t1.a1`) + SUM(`t2.b1`) FROM... Когда `t2.b1` пустая, то и результат весь (имеется ввиду при выводе (`t1.a1`) + SUM(`t2.b1`)) пустой получается... Я думал будет выходить при таком условии только значение `t1.a1`. К примеру `t1.a1` = 100, а `t2.b1`- пустое, то и итог = 100, а на самом деле итог так же пустой выходит. Как можно решить данную задачу?
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Как сложить значения нескольких столбцов из разных табли

    Создай свою базу данных/с данными тут http://sqlfiddle.com/ и покажи какой результат хочешь получить.
     
  5. eldor

    eldor Активный пользователь

    С нами с:
    3 май 2013
    Сообщения:
    202
    Симпатии:
    20
    Re: Как сложить значения нескольких столбцов из разных табли

    К сожалению только сегодня смог нормально сесть и попробовать разобраться... Я не совсем понял как там создать свою базу...

    Я сделал нужный мне запрос только на выборку.
    SELECT IF (SUM(`max_t3`) > 0, `a_max_t1` + SUM(`max_t3`), `a_max_t1`) AS `a1` FROM `t1` AS `a2` LEFT OUTER JOIN `t2` AS `a3` ON (`id_t1` = `id_t1_t2`) LEFT OUTER JOIN `t3` AS `a4` ON (`id_t1` = `id_t1_t3`) WHERE `id_t1` > 0 AND `x_t2`=10 AND `y_t2`=12 GROUP BY `id_t1`

    И теперь ломаю голову как вместо выборки сделать обновление... Что можете посоветовать?
     
  6. eldor

    eldor Активный пользователь

    С нами с:
    3 май 2013
    Сообщения:
    202
    Симпатии:
    20
    Re: Как сложить значения нескольких столбцов из разных табли

    Для наглядности сделал пример таблиц.

    Код (Text):
    1.  
    2.                   t1                        t2                            t3
    3.         ---------------------    --------------------------     -----------------------
    4.         |id_t1|a_t1|a_max_t1|    |id_t2|id_t1_t2|x_t2|y_t2|     |id_t3|id_t1_t3|max_t3|
    5.         |  1  |3000| 2000   |    |  1  |    1   | 10 | 12 |     |  1  |    1   | 100  |
    6.         |  2  |1200| 2100   |    |  2  |    2   | 10 | 12 |     |  2  |    1   | 300  |
    7.         |  3  |2000| 2200   |    |  3  |    3   | 10 | 12 |     |  3  |    2   | 200  |
    8.         |  4  |1550| 2050   |    |  4  |    4   | 50 | 20 |     |  4  |    1   | 400  |
    9.         |  5  |3200| 2800   |    |  5  |    5   | 10 | 12 |     |  5  |    3   | 600  |
    10.         |  6  |1800| 2000   |    |  6  |    6   | 10 | 12 |     |  6  |    3   | 100  |
    11.         |  7  |3000| 2000   |    |  7  |    7   | 25 | 80 |     |  7  |    2   | 800  |
    12.         |  8  |1000| 5500   |    |  8  |    8   | 10 | 12 |     |  8  |    7   | 100  |
    13.         |  9  |3600| 4000   |    |  9  |    9   | 10 | 12 |     |  9  |    7   | 400  |
    14.         |  10 |1000| 2000   |    |  10 |    10  | 10 | 12 |     |  10 |    10  | 500  |
    15.         |  11 |4400| 8200   |    |  11 |    11  | 10 | 12 |     |  11 |    10  | 900  |
    16.         |  12 |3000| 5300   |    |  12 |    12  | 10 | 12 |     |  12 |    10  | 800  |
    17.         |  13 |6000| 7200   |    |  13 |    13  | 10 | 12 |     |  13 |    2   | 200  |
    18.                                                                 |  14 |    2   | 100  |
    19.                                                                 |  15 |    6   | 300  |
    20.                                                                 |  16 |    13  | 700  |
    21.                                                              
    Мне нужно обновить столбец `a_t1`=`a_max_t1`+SUM(`max_t3`), если есть SUM(`max_t3`), а если нет, то `a_t1`=`a_max_t1` при условии, что `a_t1` > `a_max_t1`+SUM(`max_t3`), если есть SUM(`max_t3`), а если нет, то `a_t1`>`a_max_t1` если к примеру `x_t2`=10, `y_t2`=12.
    Как правильно составить такой запрос?


    Вот только смог пока сделать выборку для всех `id_t1`.
    SELECT IF (SUM(`max_t3`) > 0, `a_max_t1` + SUM(`max_t3`), `a_max_t1`) AS `a1` FROM `t1` AS `a2` LEFT OUTER JOIN `t2` AS `a3` ON (`id_t1` = `id_t1_t2`) LEFT OUTER JOIN `t3` AS `a4` ON (`id_t1` = `id_t1_t3`) WHERE `id_t1` > 0 AND `x_t2`=10 AND `y_t2`=12 GROUP BY `id_t1`