Юрий
ЮрийDec. 26, 2017, 7:52 a.m.

Как вытащить данные из трех таблиц MySQL

Есть три таблицы

1. Клиенты
2. Выполненные работы
3. Касса

Структура первой таблицы id_user, name_user
Структура второй таблицы id_work, id_user, name_work, summ_work
Структура третей таблицы id_cash, id_user, summ_cash

Как правильно рассчитать задолженность клиентов, и вывести их список? Подскажите пожалуйста.


We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

8
Evgenii Legotckoi
  • Dec. 26, 2017, 7:58 a.m.

То есть я правильно понимаю, что

  • summ_work - это стоимость работы
  • summ_cash - это общая сумма, которую вы хотите посчитать? Или это сумма средств пользователя? из которой вычитается суммарная стоимость работ?
    Юрий
    • Dec. 26, 2017, 8:04 a.m.

    summ_work - это сумма за выполненную работу, дол за клиентом

    summ_cash - это сумма внесенная в кассу
      Evgenii Legotckoi
      • Dec. 26, 2017, 8:13 a.m.
      • (edited)

      Чтобы вывести в таблицу такие данные, вам нужно будет использовать QSqlQueryModel .

      А запрос должен выглядеть следующим образом:
      SELECT id_user, SUM(summ_work)
      FROM table_works
      GROUP BY id_user
      Следующий запрос должен выбрать колонки id_user и summ_work из таблицы выполненных работ и при этом суммировать все значения долга работ по пользователям, как раз с учётом группировки по id_user.

      Единственное, здесь будет подставлен id пользователя, а не его имя. Для этого потребуется писать более сложный join запрос. Но реализуйте для начала этот вариант.
        Юрий
        • Dec. 26, 2017, 8:18 a.m.

        Пример: Работа для клиента стоила 800 р. но он заплатил 400 р.

        И получается, что нужно минусовать  из стоимости работ сумму которую он заплатил в кассу, и у кого разница не 0 то это должники.
          Evgenii Legotckoi
          • Dec. 26, 2017, 8:45 a.m.

          Примерно такой запрос получается.

          SELECT works.id_user, (SELECT cashes.summ_cash FROM cashes WHERE cashes.id_user == works.id_user) - SUM(works.summ_work)
          FROM works
          GROUP BY works.id_user
          При условии, что
          1. works - это название таблицы работ
          2. cashes - это название таблицы средств пользователей
            Юрий
            • Dec. 26, 2017, 1:57 p.m.

            Ошибка запроса "Подзапрос возвращает более одной записи"

              Юрий
              • Dec. 26, 2017, 2:03 p.m.
              SELECT users.id_user, (SELECT SUM(works.summ_work) FROM works WHERE cashes.id_user = users.id_user) - (SELECT SUM(cashes.summ_cash) FROM cashes WHERE cashes.id_user = users.id_user) FROM users ORDER BY id_user
              Данный запрос возвращает правильно  суммы, но тем клиентам у которых нет прихода в кассу, пишет NULL а нужно что бы писался долг.
                Evgenii Legotckoi
                • Dec. 26, 2017, 3:45 p.m.
                • The answer was marked as a solution.

                При создании пользователя создавайте запись с его балансом по принципу OneToOne связи.

                Это будет правильным подходом, поскольку одна запись баланса будет привязана к одному пользователю в любом случае. Входящие транзакции в кассу должны изменять баланс. Также можно автоматически изменять баланс и при добавлении работ.
                Иначе запросы к базе будут настолько страшными и огромными, что база с трудом будет справляться с простейшими операциями.
                Да и нужно быть Гуру SQL. Я к сожалению затрудняюсь написать обработку ситуации при отсутствии каких-либо записей в базе данных.

                  Comments

                  Only authorized users can post comments.
                  Please, Log in or Sign up
                  AD

                  C ++ - Test 004. Pointers, Arrays and Loops

                  • Result:50points,
                  • Rating points-4
                  m

                  C ++ - Test 004. Pointers, Arrays and Loops

                  • Result:80points,
                  • Rating points4
                  m

                  C ++ - Test 004. Pointers, Arrays and Loops

                  • Result:20points,
                  • Rating points-10
                  Last comments
                  i
                  innorwallNov. 13, 2024, 11:03 p.m.
                  How to make game using Qt - Lesson 3. Interaction with other objects what is priligy tablets What happens during the LASIK surgery process
                  i
                  innorwallNov. 13, 2024, 8:09 p.m.
                  Using variables declared in CMakeLists.txt inside C ++ files where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
                  i
                  innorwallNov. 11, 2024, 10:12 p.m.
                  Django - Tutorial 055. How to write auto populate field functionality Freckles because of several brand names retin a, atralin buy generic priligy
                  i
                  innorwallNov. 11, 2024, 6:23 p.m.
                  QML - Tutorial 035. Using enumerations in QML without C ++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
                  i
                  innorwallNov. 11, 2024, 3:50 p.m.
                  Qt/C++ - Lesson 052. Customization Qt Audio player in the style of AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
                  Now discuss on the forum
                  i
                  innorwallNov. 14, 2024, 12:39 a.m.
                  добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
                  i
                  innorwallNov. 11, 2024, 10:55 a.m.
                  Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                  9
                  9AnonimOct. 25, 2024, 9:10 a.m.
                  Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                  Follow us in social networks