Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]zapytanie do bazy na dacie
Forum PHP.pl > Forum > Przedszkole
casperii
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ś?
Tomplus
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'
casperii
@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 ? :-)
trueblue
Do jakiego zakresu chcesz ograniczyć wybór biorąc pod uwagę aktualną datę?
trueblue
Do jakiego zakresu dat chcesz ograniczyć wybór rekordów biorąc pod uwagę aktualną datę?
casperii
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.
trueblue
Jeśli dziś jest 9 czerwca, to chcesz aby pobrać od 9 maja do 9 czerwca, czy od 1 maja do 31 maja?
casperii
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.
trueblue
Rok i miesiąc obrany z selecta, to dane z formularza (select htmlowy)?
casperii
  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.
trueblue
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.
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.