Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] dodawanie cyfry do sumy na podstawie pola w tablei
Forum PHP.pl > Forum > Przedszkole
Elber
Witam,

mam zapytanie

SELECT SUM((quantity * customers_price) + (SELECT 15 FROM offer_item WHERE cd = 1 GROUP BY products_id LIMIT 1)) AS price FROM offer_item WHERE offer_id = "ID"

które działa dobrze, dodaje 15 do sumy jeśli jest pole które ma w cd ustawione 1 i to działa...problem jest bo jeśli w którymś wersie te pole jest ustawione na 0 to też dodaje 15 do sumy a nie powinno ... jak ułożyć takie zapytanie ?
wladimirec
Jeśli dobrze zrozumiałem i jeśli `offer_id` jest unikalne to wykonujesz operacje na pojedynczym wierszu, tak więc SUM() jak i grupowanie jest tu niepotrzebna.
Poza tym podzapytanie nijak nie wiąże się z zapytaniem głównym, dlatego zawsze będzie zwracać to samo.

Spróbuj tego:
  1. SELECT (`quantity` * `customers_price` + IF(`cd` = 1, 15,0)) AS price FROM `offer_item` WHERE `offer_id` = "ID"
Elber
Sęk w tym żeby wszystko było w jednym wyniku czyli ma zliczyć wszystko do 1 sumy wink.gif

A i jeszcze smile.gif Bo zapomniałem napisać, a to może być nie jasne ... mam tabelę offer i offer_item

w offer unikalne jest offer_id, a w offer_item unikalne jest offer_item_id, a nie unikalne jest offer_id (w tabeli offer_item są pozycje które są przypisane do offer_id)
wladimirec
a no to może będzie chodzić o coś takiego?
  1. SELECT SUM(`quantity` * `customers_price` + IF(`cd` = 1, 15,0)) AS price FROM `offer_item` WHERE `offer_id` = "ID"


wynikiem bedzie jedna liczba
Elber
No właśnie prawie działa ... ale do tego musiałoby być gropu by creation_date a jak dodam to group by ... to zwraca mi mi kilka wyników (w zależności od ilości pozycji)

nie no w sumie działa...tylko ja to mam skomplikowanie zrobione ...

bo do tego dochodzi line_type jak jest 1 to cena = quantity * customers_price a jak line_type jest = 2 to cena to previous_license * customers_price

jak dodać do tego jeszcze tego IF'a ?

OK chyba mam biggrin.gif

Dobrze tak jest ?

Cytat
SELECT SUM(IF(`line_type` = 1, `quantity`,`previous_license`) * `customers_price` + IF(`cd` = 1, 15,0)) AS price FROM `offer_item` WHERE `offer_id` = "ID"
wladimirec
to wydaje mi się, że tu trzebaby było zawęzić warunek o `creation_date` np. używając HAVING
albo ewentualnie odpowiednio posortować i zwaracać tylko jeden wynik (LIMIT 1)
... w zależności co chciałbyś ostatecznie uzyskać


....
to zapytanie wygląda na ok, a jak jeszcze zwraca oczekiwany wynik to great success wink.gif
Jeśli w Twojej bazie `line_type` przyjmuje tylko wartości 1 lub 2 to IF jak najbardziej sie tutaj nadaje, w przypadku gdyby było więcej możliwości to zawsze można użyć CASE ( http://dev.mysql.com/doc/refman/5.0/en/con...l#operator_case )
Elber
Jest tylko 1 lub 2 smile.gif I zwraca póki co prawidłowy sukcess smile.gif dzięki wielkie za pomoc i pokazanie jak używa się IF'a w MySQL;u smile.gif

Miłego długiego weekendu smile.gif
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.