Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Modyfikacja zapytania SQL
Forum PHP.pl > Forum > Przedszkole
yellow7
Mam takie zapytanie ktore wyciaga mi SUME wynikow danej osoby z bierzacego miesiaca, potrzebowalbym zmodyfikowac zapytanie tak aby wyrzucalo mi taka sama sume za miesiac i dwa miesiace wstecz. Czy ktos moglby mi pomoc bo juz probuje od pewnego czasu i nie potrafie tego ogarnac.

Na pewno to cos prostego :-/ . Z gory dzieki

  1. SELECT SUM(WYNIK) AS SUMA FROM TYPY WHERE DATA>=DATE_ADD(curdate(), INTERVAL -(DAYOFMONTH(curdate())-1) DAY) AND WYNIK IS NOT NULL AND TYPER='Georgisd'



wookieb
Cytat(yellow7 @ 1.03.2011, 13:20:27 ) *
Na pewno to cos prostego :-/ . Z gory dzieki

Skoro coś prostego to dlaczego sam tego nie ogarniesz. I jak próbowałeś do tego podejść?
yellow7
exclamation.gif!!! Kocham takie odpowiedzi exclamation.gif!!!

Jakbym sam wiedzial to bym nie wrzucal tematu na forum. Po co piszesz takiego glupiego posta, jak sie czlowiek uczy to nie wie odrazu wszystkiego... Po to jest chyba dzial przedszkole.
wookieb
To po co piszesz, że jest proste skoro nie jesteś w stanie tego ogarnąć? Poza tym napisałem jasno "pokaż jak próbowałeś".

Użyj BETWEEN żeby podać zakres dat do MYSQL-a. To co masz jest nieoptymalne.
http://dev.mysql.com/doc/refman/5.0/en/com...perator_between
jako wartości wstawiasz skrajne daty miesiąca.
AlexDeLarge
Sprecyzuj pytanie.
Chcesz w jednym zapytaniu wyciągnąć:
a) sumę wyników za okres od miesiąca wstecz do dziś i od 2 miesięcy wstecz do dziś
czy
b) sumę wyników za okres od miesiąca wstecz do dziś i od 2 miesięcy wstecz do jednego miesiąca wstecz

? W jednym zapytaniu prawdopodobnie tego nie zrobisz bez korzystania z podzapytań.

  1. SELECT p1.SUMA AS sumaMies1, p2.SUMA AS sumaMies2
  2. FROM
  3. (SELECT SUM(WYNIK) AS SUMA FROM TYPY WHERE DATA BETWEEN NOW() AND NOW() - 1 MONTH LIMIT 1) AS p1,
  4. (SELECT SUM(WYNIK) AS SUMA FROM TYPY WHERE DATA BETWEEN NOW() AND NOW() - 2 MONTH LIMIT 1) AS p2


EDIT:
jeszcze o co innego Ci chodziło, niemniej konstrukcja taka sama.
yellow7
Potrzebuje zrobic identyczne zapytanie jak to ktore podalem na poczatku tylko chce uzyskac w wyniku SUME pola WYNIK za miesiac LUTY bo w chwili obecnej zapytanie ktore podaje sumuje cos takiego za miesiac bierzacy MARZEC.


Wypocilem cos jak ponizej ale wyrzuca mi to wartosc 9.65 a powinno podawac jako wynik -11 ktore uzyskuje po wykonaniu drugiego zapytania i -11 jest prawidlowa wartoscia.


Mam nadzieje ze mniej wiecej objasnilem a nie zagmatwalem jeszcze bardziej.


  1. SELECT
  2. SUM(WYNIK) AS SUMA
  3. FROM TYPY
  4. WHERE
  5. DATA BETWEEN
  6. CAST(CONCAT(
  7. YEAR(DATE_ADD(now(), INTERVAL -2 month)), '-',
  8. MONTH(DATE_ADD(now(), INTERVAL -2 month)), '-',
  9. '01') AS DATE)
  10. AND
  11. DATE_ADD(CAST(CONCAT(
  12. YEAR(DATE_ADD(now(), INTERVAL -1 month)), '-',
  13. MONTH(DATE_ADD(now(), INTERVAL -1 month)), '-',
  14. '01') AS DATE), INTERVAL -1 minute)
  15. AND
  16. WYNIK IS NOT NULL AND
  17. TYPER='Georgisd'
  18.  
  19.  
  20.  




  1. SELECT
  2. SUM(WYNIK) AS SUMA
  3. FROM TYPY
  4. WHERE
  5. DATE BETWEEN '2011-02-01' AND '2011-02-28' AND
  6. WYNIK IS NOT NULL AND
  7. TYPER='Georgisd'


Dodam jeszcze ze ponizsze zapytanie zwraca mi wartosc 9.65 nie wiem o co chodzi.

  1.  
  2. SELECT
  3. SUM(WYNIK) AS SUMA
  4. FROM TYPY
  5. WHERE
  6. DATA BETWEEN '2011-01-01' AND '2011-01-31' AND
  7. WYNIK IS NOT NULL AND
  8. TYPER='Georgisd'




wookieb - wystarcza Ci takie proby czy mam napisac gotowe rozwiazanie sam a TY mi potwierdzisz ze jest OK
wookieb
No i zapytanie masz prawidłowe.
Tylko chyba pomyliłeś słówka DATA z "DATE".
yellow7
Dobra mam to chyba tak jest poprawnie. AlexDeLarge dzieki na naprowadzenie na wlasciwe tory :-)

||
||
\ /
\/

  1.  
  2. SELECT
  3. SUM(WYNIK) AS SUMA
  4. FROM TYPY
  5. WHERE
  6. DATA BETWEEN
  7. CAST(CONCAT(
  8. YEAR(DATE_ADD(now(), INTERVAL -1 month)), '-',
  9. MONTH(DATE_ADD(now(), INTERVAL -1 month)), '-',
  10. '01') AS DATE)
  11. AND
  12. DATE_ADD(CAST(CONCAT(
  13. YEAR(DATE_ADD(now(), INTERVAL -0 month)), '-',
  14. MONTH(DATE_ADD(now(), INTERVAL -0 month)), '-',
  15. '01') AS DATE), INTERVAL -0 minute)
  16. AND
  17. WYNIK IS NOT NULL AND
  18. TYPER='Georgisd'
  19.  
  20.  



Jak mam DATE dostaje blad "#1054 - Unknown column 'DATE' in 'where clause' " przy DATA jest OK
wookieb
Panie. Te śmieszne wyliczenia dat zrzucasz na mysql-a przez co rzy większej tabeli zamuli strasznie. W miarę możliwości (a teraz takie masz) unikamy dynamicznych wyliczeń dat.
Dlatego twoja wersja
  1. SELECT
  2. SUM(WYNIK) AS SUMA
  3. FROM TYPY
  4. WHERE
  5. DATE BETWEEN '2011-02-01' AND '2011-02-28' AND
  6. WYNIK IS NOT NULL AND
  7. TYPER='Georgisd'
  8.  
Była jak najbardziej prawidłowa.
yellow7
I co mam sobie co miesiac zmieniac date na stronce musze to zautomatyzowac. Ale chyba to rozwiaze po stronie PHP bedzie szybsze.

Wlasnie dlatego rzucam temat na forum zeby ktos kto sie zna na tym lepiej odemnie cos doradzil.
wookieb
Cytat
Ale chyba to rozwiaze po stronie PHP bedzie szybsze.

Zdecydowanie. A z generowaniem dat nie ma żadnych problemów.
mktime a jeżeli masz php5.3 to jak najbardziej DateTime
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.