Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]zapytanie do bazy na dacie
casperii
post
Post #1





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


Panowie mam zapytanie:

  1. SELECT SUM( (time_to_sec(`to`) - time_to_sec(`from`))/3600 * `hourly_rate`) AS `TotalPayment` FROM `payment` WHERE `login` = "'.UserName().'" AND MONTH(`date`) = "'.month().'" AND YEAR(`date`) = "'.year().'"


teraz chciałbym stworzyć drugie zapytanie z miesiąca wstecz pomysły jakieś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Tomplus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Skorzystaj z DATE_ADD/DATE_SUB:

Kod
AND v.date > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
AND v.date < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH))


o ile faktycznie masz w funkcjach month() i year() datę aktualną.

zawsze możesz zastąpić CURDATE() odpowiednią wartością datatime.

Ewentualnie skorzystać jeszcze z BETWEEN v.date 'pierwszaData' AND 'drugaData'
Go to the top of the page
+Quote Post
casperii
post
Post #3





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


@Tomplus ale jeżeli zrobię tak:

  1. SELECT SUM( (time_to_sec(`to`) - time_to_sec(`from`))/3600 * `hourly_rate`) AS `TotalPayment` FROM `payment` WHERE `login` = "'.UserName().'" AND date > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) AND date < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH))


to to jest źle, bo na chwile obecną funkcja month() to 06 , funkcja year() to 2017, zatem CURDATE INTERVAL - 1 MONTH powinno być 05-2017 , tylko jak to ugryźć ?

Jakieś pomysły ? :-)
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Do jakiego zakresu chcesz ograniczyć wybór biorąc pod uwagę aktualną datę?


--------------------
Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Do jakiego zakresu dat chcesz ograniczyć wybór rekordów biorąc pod uwagę aktualną datę?


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #6





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


ilość rekordów około 30 (30 dni) , data aktualna minus 1 miesiąc = czyli wyliczenie z ostatniego miesiąca. Chodzi o to by pobrać wyliczenie wypłaty z poprzedniego miesiąca.
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Jeśli dziś jest 9 czerwca, to chcesz aby pobrać od 9 maja do 9 czerwca, czy od 1 maja do 31 maja?


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #8





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


jeśli dziś mamy 9-go czerwca, to powinno pokazać od 1-go do ostatniego maja.
Tylko, że pobierać ma wg. funkcji month() , year() minus 1 miesiąc.
Do jednego selecta wczytuje obecny month(), year() do której wczytuje miesiąc i rok pobrany z selecta - obecny miesiąc,
Do drugiego selecta poprzedni miesiąc.
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Rok i miesiąc obrany z selecta, to dane z formularza (select htmlowy)?


--------------------
Go to the top of the page
+Quote Post
casperii
post
Post #10





Grupa: Zarejestrowani
Postów: 681
Pomógł: 28
Dołączył: 14.08.2014

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


  1. function month(){
  2. $month = date('m'); //miesiąc
  3. return $month;
  4. }
  5.  
  6. function year(){
  7. $year = date('Y'); //rok
  8. return $year;
  9. }


jeśli nie wybrano nic z selecta (listy rozwijanej) uznajemy że obecny miesiąc dla pierwszego zapytania to obecny miesiąc = wypłata w tym miesiącu.
Dla drugiego zapytania będzie to miesiąc obecny minus 1 miesiąc = poprzednia wypłata.
Go to the top of the page
+Quote Post
trueblue
post
Post #11





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Miesiąc:
  1. SELECT * FROM tabela WHERE data>='RRRR-MM-01' AND data<= LAST_DAY('RRRR-MM-01')

Miesiąc wcześniejszy od powyższego:
  1. SELECT * FROM tabela WHERE data>= DATE_SUB('RRRR-MM-01', INTERVAL 1 MONTH) AND data<= LAST_DAY(DATE_SUB('RRRR-MM-01', INTERVAL 1 MONTH))

Za RRRR podstawiasz rok, za MM miesiąc.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:32