• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sumowanie wyników z MySQL - Relacje

Object Storage Arubacloud
0 głosów
198 wizyt
pytanie zadane 30 października 2018 w SQL, bazy danych przez Greeenone Pasjonat (16,100 p.)

Dobry wieczór, 

Od jakiegoś czasu uczę się od podstaw MySQL. Udało mi się stworzyć prosty formularz do logowania i rejestracji oraz parę innych prostych skryptów działających w PHP oraz MySQL. Podczas owej nauki napotkałem pewien problem. Nie jest to raczej problem z kodem a problem z logiką.

Jako następne zadanie postanowiłem wykonać pewien skrypt dzięki któremu można tworzyć posiłki z dostępnych produktów a następnie sumuje nam spożyte wartości odżywcze (Coś jak aplikacje na telefon do liczenia kcalorii itp.)

Zaplanowałem tabelki ale do końca nie udało mi się tego wykonać z powody logiki. 

Oto moje tabelki:

 

 

Produkty

ID Nazwa produktu Kcal Białko Węglowodany Tłuszcze
1 Jajo 155 13 1 1
2 Banan 89 1 23 0
3 Stek 271 25 0 19

 

Posiłki

ID Nazwa posiłku Typ posiłku
1 Śniadanie Proteinowe
2 Obiad Proteinowe

 

Dodanie produktu do posiłku

ID

ID posiłku

ID produktu ilość (gram)
1 1 1 100
2 1 2 100
3 2 3 100

 

Przypisanie posiłku do usera

 

ID ID posiłku z produktami ID użytkownika Czy został spożyty
1 1 89 TRUE
2 2 89 FALSE

 

I teraz zastanawiam się jak zrobić tak, aby sumowało wartości ze zjedzonych posiłków..

- Sprawdzenie, czy spożycie posiłku posiada wartość TRUE

- Jeśli posiłek posiada wartość TRUE -> Sprawdź jaki posiłek ma ID (W tym przypadku 1)

-  Pobierz z tabeli dodania produktów do posiłku wszystko co posiada ID = 1 AND ID Produktu (Wszystko)

 

I w tym momencie się gubię. Czy trzeba wykonać jakieś zapytanie, które pobierze ID produktu oraz ilość tylko z wierszy gdzie ID posiłku posiada ID równe 1 ? A potem sprawdza ID posiłków oraz oblicza wartości ?

Czy np. lepiej jest wykonać tak, że podczas dodawania produktu do posiłku, zamiast podawać ilość w g, od razu obliczać wszystko i podać informacje kcal - białko - węgle - tłuszcze ?

1 odpowiedź

0 głosów
odpowiedź 30 października 2018 przez Chess Szeryf (76,710 p.)
wybrane 30 października 2018 przez Greeenone
 
Najlepsza
mysql> select * from produkty;
+----+------+---------+-------------+----------+----------------+
| id | kcal | protein | weglowodany | tluszcze | nazwa produktu |
+----+------+---------+-------------+----------+----------------+
|  1 |  155 |      13 |           1 |        1 | jajo           |
|  2 |   89 |       1 |          23 |        0 | banan          |
|  3 |  271 |      25 |           0 |       19 | stek           |
+----+------+---------+-------------+----------+----------------+
mysql> select * from meal;
+----+---------------+-------------+
| id | nazwa_posilku | typ_posilku |
+----+---------------+-------------+
|  1 | sniadanie     |  proteinowe |
|  2 | obiad         |  proteinowe |
+----+---------------+-------------+
mysql> select * from dodanie_produktu_do_posilku;
+----+------------+-------------+----------+
| id | id_posilku | id_produktu | quantity |
+----+------------+-------------+----------+
|  1 |          1 |           1 |      100 |
|  2 |          1 |           2 |      100 |
|  3 |          2 |           3 |       50 |
+----+------------+-------------+----------+
mysql> select * from users;
+----+---------+--------------------+-------------------------+
| id | id_user | czy_zostal_spozyty | ID_posilku_z_produktami |
+----+---------+--------------------+-------------------------+
|  1 |      89 | true               |                       1 |
|  2 |      89 | false              |                       2 |
|  3 |       8 | true               |                       2 |
|  4 |       4 | true               |                       3 |
|  5 |       3 | false              |                       1 |
|  6 |      59 | true               |                       1 |
|  7 |     450 | true               |                       3 |
+----+---------+--------------------+-------------------------+

Potestuj te zapytanie:

select kcal, protein, weglowodany, tluszcze, quantity,
truncate((kcal + protein + weglowodany + tluszcze)*(quantity/1000),2) as res,
meal.nazwa_posilku, meal.typ_posilku, produkty.`nazwa produktu`, users.id_user  
from produkty,users, meal,dodanie_produktu_do_posilku where (case when czy_zostal_spozyty = 'true' then users.id_posilku_z_produktami end) 
= dodanie_produktu_do_posilku.id and dodanie_produktu_do_posilku.id_posilku = meal.id and dodanie_produktu_do_posilku.id_produktu=produkty.id;

Rezultat tego zapytania dla tych danych, co wyżej podałem:

+------+---------+-------------+----------+----------+-------+---------------+-------------+----------------+---------+
| kcal | protein | weglowodany | tluszcze | quantity | res   | nazwa_posilku | typ_posilku | nazwa produktu | id_user |
+------+---------+-------------+----------+----------+-------+---------------+-------------+----------------+---------+
|  155 |      13 |           1 |        1 |      100 | 17.00 | sniadanie     |  proteinowe | jajo           |      89 |
|   89 |       1 |          23 |        0 |      100 | 11.30 | sniadanie     |  proteinowe | banan          |       8 |
|  271 |      25 |           0 |       19 |       50 | 15.75 | obiad         |  proteinowe | stek           |       4 |
|  155 |      13 |           1 |        1 |      100 | 17.00 | sniadanie     |  proteinowe | jajo           |      59 |
|  271 |      25 |           0 |       19 |       50 | 15.75 | obiad         |  proteinowe | stek           |     450 |
+------+---------+-------------+----------+----------+-------+---------------+-------------+----------------+---------+
komentarz 30 października 2018 przez Greeenone Pasjonat (16,100 p.)
Serdecznie dziękuje za tak wyczerpującą odpowiedź! :)

Podobne pytania

0 głosów
0 odpowiedzi 298 wizyt
pytanie zadane 15 maja 2017 w SQL, bazy danych przez Marcin_N_97 Stary wyjadacz (10,290 p.)
+3 głosów
3 odpowiedzi 716 wizyt
pytanie zadane 22 maja 2020 w Sprzęt komputerowy przez DawidK Nałogowiec (37,910 p.)
0 głosów
3 odpowiedzi 1,449 wizyt

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...