Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
hej
mam pytanko jak powinienem skonstruować zapytanie SQL'owe aby pokaztywało mi rekordy tylko te z poprzedniego miesiąca (od 1 do ostatniego) czyli:
mamy miesiąc czerwiec chce widzieć dane z maja,
mamy miesiąc lipiec chce widzieć dane z czerwca itd.
z góry dziękuje
Offline
Jakiego DBMS używasz? W różnych silnikach jest to różnie skonstruowane.
W MySQL np.:
SELECT * FROM TABLE WHERE ( month( now() ) > 1 AND month( now() ) = month( date ) + 1 AND year( now() ) = year( date ) ) OR ( month( now() ) = 1 AND month( date ) = 12 AND year( now() ) = year( date) + 1 );
W PosgreSQL np.:
SELECT * FROM TABLE WHERE ( extract( month from current_date ) > 1 AND extract( month from current_date ) = extract( month from current_date ) + 1 AND extract( year from current_date) = extract( year from date) ) OR ( extract( month from current_date ) = 1 AND extract( month from current_date ) = 12 AND extract( year from current_date) = extract( year from date) + 1 );
EDIT:
Poprawione - z uwzględnieniem roku.
Offline
sorki ze nie napisalem, uzywam MYSQL 5.0
To co napisałes nie potrafie zabardzo uzyc (sorry jest laikiem w sql-u).
Mianowicie mam tabele "wnioski":
w tej tabeli mam mniej wiecej kolumny:
id, id_wniosku, data, imie, nazwisko, kwota itd.
odkładaj mi się tam codziennie dane, jednakże ja potrzebuje raporty zawsze za poprzedni miesiąc od 1-ego do ostatniego (a ostatni to czasem jest 30,31 ...itd wiadomo oco chodzi). Tak więc popierwsze w mojej tabli wnioski muszę liczyć kwotę za poprzedni miesiąc i liczbę wniosków też tylko za poprzedni miesiac.
PS pewnie to co napisałeś jest rozwiązaniem ale jesli moge Cie prosic o jaśniejsze przedstawienie sprawy.
pozdrawiam
Offline
SELECT * FROM wnioski WHERE ( month( now() ) > 1 AND month( now() ) = month( data ) + 1 AND year( now() ) = year( data ) ) OR ( month( now() ) = 1 AND month( data ) = 12 AND year( now() ) = year( data ) + 1 );
To polecenie wybierze wszystkie krotki z datą z poprzedniego miesiąca.
Offline
hejka jak odpalam twoje zapytanie w phpmyadminie idzie szybciutko, jak robie to z poziomu php-a w swoim skryrypcia muli juz ok 10min oto kod:
$sql = mysql_query("SELECT nazwa_kolumny FROM wnioski
WHERE ( month( now() ) > 1 AND month( now() ) = month( data ) + 1
AND year( now() ) = year( data ) ) OR ( month( now() ) = 1
AND month( data ) = 12 AND year( now() ) = year( data ) + 1 )");
while($aaa=mysql_fetch_array($sql))
echo "$aaa";
czy pętla while go tak za mula czy robie coś źle ?
Offline
Skoro w phpMyAdminie zapytanie zwraca dobre wyniki, więc jest sformułowane poprawnie. Problem tkwi w skrypcie. Zrób testy, wpisując w odpowiednie miejsca wyrażenia kontrolne, takie jak np. "mysql_num_rows($sql)" zaraz po wysłaniu zapytania. Dowiesz się, czy zwraca ono jakiekolwiek wyniki.
Popraw skrypt. Funkcja 'mysql_fetch_array()' zwraca tablicę, nie stringa.
Offline
ok dziekuje sprawdze
Offline
Kod:
SELECT * FROM wnioski WHERE ( month( now() ) > 1 AND month( now() ) = month( data ) + 1 AND year( now() ) = year( data ) ) OR ( month( now() ) = 1 AND month( data ) = 12 AND year( now() ) = year( data ) + 1 );To polecenie wybierze wszystkie krotki z datą z poprzedniego miesiąca.
Mozna rowniez tak:
SELECT * FROM wnioski WHERE DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 MONTH), "%Y-%m") = DATE_FORMAT(data, "%Y-%m");
Offline
troszkę stary watek ale mam podobny problem wiec dołączę się;)
Jak powinno wyglądać zapytanie jeżeli nie mam w tabeli w pola 'data'? Mysql jakoś zaznacza kiedy został dodany rekord ?
Offline
Z tego, co mi wiadomo, to nie.
Offline
Strony: 1