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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2007-10-13 11:40:47

  zyga - Użytkownik

zyga
Użytkownik
Zarejestrowany: 2005-08-25

pokazywanie rekordów zawsze z poprzedniego miesiąca

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


apt-get remove windows ....
apt-get install debian :)

Offline

 

#2  2007-10-13 12:14:21

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

Jakiego DBMS używasz? W różnych silnikach jest to różnie skonstruowane.

W MySQL np.:

Kod:

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.:

Kod:

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

 

#3  2007-10-13 13:54:14

  zyga - Użytkownik

zyga
Użytkownik
Zarejestrowany: 2005-08-25

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

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


apt-get remove windows ....
apt-get install debian :)

Offline

 

#4  2007-10-13 14:14:52

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

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.

Offline

 

#5  2007-10-13 15:41:11

  zyga - Użytkownik

zyga
Użytkownik
Zarejestrowany: 2005-08-25

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

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 ?


apt-get remove windows ....
apt-get install debian :)

Offline

 

#6  2007-10-13 18:32:58

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

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

 

#7  2007-10-14 22:35:00

  zyga - Użytkownik

zyga
Użytkownik
Zarejestrowany: 2005-08-25

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

ok dziekuje sprawdze


apt-get remove windows ....
apt-get install debian :)

Offline

 

#8  2007-10-14 23:56:09

  raixer - Moderator

raixer
Moderator
Zarejestrowany: 2004-08-21

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

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:

Kod:

SELECT * FROM wnioski WHERE DATE_FORMAT(DATE_SUB(now(), INTERVAL 1 MONTH), "%Y-%m") = DATE_FORMAT(data, "%Y-%m");

Open Source - Świat otwartych umysłów
Linux Registered User: #276548

Offline

 

#9  2008-02-24 21:26:04

  HunteR - DUG

HunteR
DUG
Skąd: ?
Zarejestrowany: 2006-03-14

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

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

 

#10  2008-02-24 22:14:01

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: pokazywanie rekordów zawsze z poprzedniego miesiąca

Z tego, co mi wiadomo, to nie.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)