Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Statystyki sprzedaży
Forum PHP.pl > Forum > Przedszkole
d.stp
No i kolejny problem z zapytaniem do bazy mysql... businesssmiley.png

Robię statystyki sprzedaży w mini sklepie na autorskim skrypcie. Muszę wprowadzić coś w rodzaju statystyk sprzedaży.

Mam tabele "zarobki" gdzie trzymam całe info o wpływach ze sprzedaży produktów.

Chcę zrobić statystyki z każdego miesiąca, czyli generalnie to zrobiłbym to tak:

  1. SELECT * FROM `zarobki` WHERE `user_id` = 'user_id' AND `data` = '02-2014'


I to wyświetli mi statystyki z miesiąca luty 2014, ale potrzebuję statystyk z każdego dnia w tym miesiącu, czyli:

01-02-2014 | zarobki | id_usera
02-02-2014 | zarobki | id_usera
03-02-2014 | zarobki | id_usera
[...]
17-02-2014 | zarobki | id_usera

Do tego, żeby nie pokazywało statystyk z dni, których jeszcze nie było w tym miesiącu...

No i kompletnie nie wiem jak to zrobić :/
markonix
Cytat(d.stp @ 17.02.2014, 18:21:49 ) *
Chcę zrobić statystyki z każdego miesiąca, czyli generalnie to zrobiłbym to tak:

  1. SELECT * FROM `zarobki` WHERE `user_id` = 'user_id' AND `data` = '02-2014'


I to wyświetli mi statystyki z miesiąca luty 2014


Szczerze wątpię chyba że masz taką beznadziejną strukturę bazy i trzymasz daty w formacie MM-YYYY.

Ogólnie najprościej pętlą jednak wtedy zapytań jest troszkę dużo - np. 31 w najgorszym wypadku.
Jednym zapytaniem też by szło, popróbowałbym z grupowaniem, SUM i na końcu order po kolumnie z dniami.
d.stp
Trzymam daty w formacie XX-XX-XXXX, jak mam inaczej trzymać? Tak jest mi najwygodniej.

Mógłbyś pomóc z tym zapytaniem? Majstruje od kilku godzin, ale nie mogę nic wymyślić.

W formularzu mam do wyboru miesiąc oraz rok. W PHP pobieram sobie te wartości z których użytkownik chce wyświetlić statystyki.

Nie mam pojęcia jak to zrobić... sad.gif

Próbowałem z pętlą FOR, tak na harpagana nawet:
  1. $data_dzisiejsza = date('d');
  2. for($i = 1, $i < $data_dzisiejsza, $i++) {
  3. echo '
  4. <tr>
  5. <td>data</td>
  6. <td>...</td>
  7. </tr>
  8. ';
  9. }


No ale to nie o to chodzi ;/
Turson
Jeżeli trzymasz datę w formacie XX-XX-XXXX a nie RRRR-MM-DD to znaczy, że nie masz tej kolumny typu date bądź datetime. A to jest typ do trzymania dat
d.stp
Pole z datą mam w varchar, nie wiedziałem o date i datetime.

No ale to nie jest chyba jakoś bardzo istotne teraz
markonix
Cytat(d.stp @ 17.02.2014, 19:15:55 ) *
No ale to nie jest chyba jakoś bardzo istotne teraz

Czemu nie teraz? Chyba lepiej wcześnie zacząć konstruować strukturę bazy poprawnie?
mmmmmmm
Co do daty to zmień czym prędzej.
Co do zaś zarobków, to możesz to zrobić na (przynajmniej) dwa sposoby:
1. zapytanie w stylu :
SELECT id_usera, data, sum(zarobki) FROM zarobki GROUP BY id_usera, data ORER BY id_usera, data
ale to ci nie wykaże WSZYSTKICH dni, tylko te, które są w bazie. Być może w święta nie ma zarobków, ale czy jest wtedy sens pokazywać datę bez wartości? Jeśli już się na to uprzesz to możesz to zrobić w po stronie PHP.
2. Skomplikowany SELECT, który uwzględnia wszystkie dni...
coś w stylu:
SELECT '01' dzien UNION SELECT '02' UNION SELECT '03' ...
i to połączyć do daty. dalej analogicznie.
W obu przypadkach zapytanie nie powinno pokazać zarobków z dni, których jeszcze nie było z tej prostej przyczyny, że takich rekordów nie pownno jeszcze być.
Martin-ZG
Cytat(d.stp @ 17.02.2014, 18:21:49 ) *
No i kolejny problem z zapytaniem do bazy mysql... businesssmiley.png

Robię statystyki sprzedaży w mini sklepie na autorskim skrypcie. Muszę wprowadzić coś w rodzaju statystyk sprzedaży.

Mam tabele "zarobki" gdzie trzymam całe info o wpływach ze sprzedaży produktów.

Chcę zrobić statystyki z każdego miesiąca, czyli generalnie to zrobiłbym to tak:

  1. SELECT * FROM `zarobki` WHERE `user_id` = 'user_id' AND `data` = '02-2014'


I to wyświetli mi statystyki z miesiąca luty 2014, ale potrzebuję statystyk z każdego dnia w tym miesiącu, czyli:

01-02-2014 | zarobki | id_usera
02-02-2014 | zarobki | id_usera
03-02-2014 | zarobki | id_usera
[...]
17-02-2014 | zarobki | id_usera

Do tego, żeby nie pokazywało statystyk z dni, których jeszcze nie było w tym miesiącu...

No i kompletnie nie wiem jak to zrobić :/


Spróbuj pokombinować z wyrażeniami regularnymi. http://tom000.info/blog/mysql__wyrazenia_regularne.htmlKurs wyrażeń regularnych w MySQL

Poniżej masz wzorzec do formatu dwie cyfry od 0-9 plus -02-2013
Kod
^([0-9]{2}-02-2013)$


A tutaj stronę do testowania wyrażeń http://regexp.pl

Myślę, że w ten sposób powinno ci się udać otrzymać wyniki, które będziesz mógł przepuścić przez tą pętlę.

  1. $data_dzisiejsza = date('d');
  2. for($i = 1, $i < $data_dzisiejsza, $i++) {
  3. echo '
  4. <tr>
  5. <td>data</td>
  6. <td>...</td>
  7. </tr>
  8. ';
  9. }


Z tym, że wydaje mi się że $data_dzisiejsza musisz zrzutować na int, bo date chyba zwraca string.
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.