Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mnożenie i sumowanie kolumn w zapytaniu
115750
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?

Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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?
Go to the top of the page
+Quote Post
115750
post
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?
Go to the top of the page
+Quote Post
115750
post
Post #5





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




podstawa_kwota+premia_kwota
Haha (IMG:style_emoticons/default/tongue.gif)
Przecież Ty masz pola o takich nazwach
T3.podstawa_kwota
oraz
T3.premia_kwota
więc Ty mnie tu kolego nie czaruj (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

edit: zamiast aliasu podstawa_kwota utwórz sobie alias xyz_nie_czaruj to wówczas zobaczysz jakie piękne błędy dostajesz (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
115750
post
Post #7





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #8





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


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..."
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:47