Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mnożenie i sumowanie kolumn w zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
115750
Chciałem pomnożyć 2 kolumny z jednej tabeli przez 2 z innej i dodać te wyniki do siebie ale niestety mimo, że zapytanie jest wykonywane bez błędu, to wynik dodawania nie jest prawidłowy. Niezależnie od wartości w kolumnach, otrzymuję zawsze taki sam wynik, który nie pasuje do niczego.

  1. SELECT T1.A*T2.A AS wynik_A, T1.B*T2.B AS wynik_B, wynik_A + wynik_B AS wynik_koncowy FROM tabela T1, tabela T2 WHERE T1.id = T2.id


Czy można zatem w zapytaniu korzystać z nazw kolumn, które wcześniej zdefiniowaliśmy w tym zapytaniu?

nospor
  1. SELECT T1.A*T2.A AS wynik_A, T1.B*T2.B AS wynik_B, T1.A*T2.A + T1.B*T2.B AS wynik_koncowy FROM tabela T1, tabela T2 WHERE T1.id = T2.id

Nadal jest nieprawidłowy?
115750
Cytat(nospor @ 21.11.2012, 12:29:58 ) *
  1. SELECT T1.A*T2.A AS wynik_A, T1.B*T2.B AS wynik_B, T1.A*T2.A + T1.B*T2.B AS wynik_koncowy FROM tabela T1, tabela T2 WHERE T1.id = T2.id

Nadal jest nieprawidłowy?

To już sprawdziłem wcześniej i w tej postaci działa, jednak wydłuża to znacząco długość zapytania, zwłaszcza gdy takich operacji jest więcej.
Zależałoby więc na użyciu zdefiniowanych wcześniej nazw.
nospor
Twierdzisz, że o to: wynik_A + wynik_B AS wynik_koncowy nie pluje ci błędem tylko zwraca zły wynik. Nie wiem jakim cudem, bo mi taki zapis pluje właśnie błędem bazy i w wyniku czego nie zwraca żadnego wyniku.

Możesz pokazać cały kod, jak to odbierasz i w ogóle?
115750
Cytat(nospor @ 21.11.2012, 15:53:32 ) *
Twierdzisz, że o to: wynik_A + wynik_B AS wynik_koncowy nie pluje ci błędem tylko zwraca zły wynik. Nie wiem jakim cudem, bo mi taki zapis pluje właśnie błędem bazy i w wyniku czego nie zwraca żadnego wyniku.

Możesz pokazać cały kod, jak to odbierasz i w ogóle?


Dokładnie tak twierdzę smile.gif Póki co testuję to w PHPMyAdmin.

Oto kod:
  1. SELECT T2.id, CONCAT(T2.nazwisko, ' ', T2.imie) AS osoba,
  2. T1.podstawa*T3.podstawa_kwota AS podstawa_kwota,
  3. T1.podstawa*T3.podstawa_kwota * T3.podstawa_stopa / 100 AS podatek,
  4. T1.premia*T3.premia_kwota AS premia_kwota,
  5. T1.premia*T3.premia_kwota*T3.premia_stopa / 100 AS premia_podatek,
  6. podstawa_kwota+premia_kwota
  7. FROM `lists_persons` T1, persons T2, lists T3
  8. WHERE id_list = 1
  9. AND T2.id = T1.id_person
  10. AND T3.id = T1.id_list
  11. ORDER BY osoba


Ostatnia kolumna czyli podstawa_kwota+premia_kwota zwraca mi wartość 900 niezależnie od składników sumy.
Już przy obliczaniu podatku też mi nie działo to prawidłowo, więc rozpisałem to tak jak Ty proponowałeś ale dalsze wyliczenia będa dłuższe, więc potrzebuję tych aliasów.
nospor
podstawa_kwota+premia_kwota
Haha tongue.gif
Przecież Ty masz pola o takich nazwach
T3.podstawa_kwota
oraz
T3.premia_kwota
więc Ty mnie tu kolego nie czaruj tongue.gif

Pisząc tak:
podstawa_kwota+premia_kwota
to baza ci bierze wartości z pól a nie z aliasów, gdyż aliasów baza nie widzi. Dlatego masz złe wartości, bo to są wartości z pól a nie z wyliczonych aliasów smile.gif

edit: zamiast aliasu podstawa_kwota utwórz sobie alias xyz_nie_czaruj to wówczas zobaczysz jakie piękne błędy dostajesz smile.gif
115750
Cytat(nospor @ 21.11.2012, 17:28:01 ) *
zamiast aliasu podstawa_kwota utwórz sobie alias xyz_nie_czaruj to wówczas zobaczysz jakie piękne błędy dostajesz smile.gif

No i wszystko stało się jasne. Dziwi mnie tylko dlaczego baza w ogóle dopuściła do utworzenia takich aliasów.
Dzięki za pomoc.
mmmmmmm
Cytat(115750 @ 22.11.2012, 00:13:02 ) *
Dziwi mnie tylko dlaczego baza w ogóle dopuściła do utworzenia takich aliasów.

A dlaczego miałaby nie dopuścić?
"Nie słupa to wina, że go ślepy nie widzi..."
nospor
Cytat
Dziwi mnie tylko dlaczego baza w ogóle dopuściła do utworzenia takich aliasów.
To jest normalna sytuacja. Sam bardzo często zakładam aliasy o takich nazwach jak pola, np gdy interesuje mnie skrócona wartosc pola, to robię tak:
  1. SELECT LEFT(nazwa_pola, 5) AS nazwa_pola FROM tabela

A w php odbieram dane normalnie z nazwa_pola.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.