![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cześć!
Napisałem pewien prosty skrypt php i chcę go teraz zoptymalizować. Mam jedną zagwozdkę, na którą nie mam pomysłu. Oto ona: W skrypcie ważną rolę odgrywa zmienna miesiąc wybrana przez użytkownika - chodzi o to, że użytkownik ma do wyboru kilka miesięcy, przekazuje wybór za pomocą $_GET, a następnie wyświetlane są dane z wybranego miesiąca. Jest jednak mały problem: jeśli istnieją dane z miesiąca poprzedniego, to ostatni ich wiersz musi się pojawić w bieżącym zestawieniu. Zmienna $_GET['mth'] (czyli ta przechowująca aktualnie wybrany miesiąc) ma format MM, a zapytanie sql które stosuję do wyciągnięcia wierszy z danego miesiąca:
Jeśli nie widać tego od razu, to tłumaczę: dla marca zapytanie to wyszukuje wyrazów z "-03-", dla kwietnia z "-04" etc. Żeby pobrać ostatni wiersz z poprzedniego miesiąca stosuję:
Niestety, zmienną $prev otrzymuję w nieelegancki sposób, a mianowicie instrukcją switch:
Nie wiem jednak jak zrobić to inaczej, bo zmienna $_GET['mth'] nie jest przecież liczbą, więc nie mogę po prostu odjąć od niej jedności. Bardzo proszę o wskazówki - być może już sam pomysł na pobieranie wierszy z danego miesiąca jest zbyt skomplikowane, bo można to zrobić za pomocą narzędzi ukrytych w MySQL, kto wie? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Kod $_GET['mth'] $mth = (int) $_GET['mth']; Zostanie przekonwertowany na int ;d @edit Radzę wyłączyć dyrektywę register globals w apache ;d (chyba że korzystasz z hostingu to pewnie wyłączyli) Kod if (($mth > 1) && ($mth < 13)) {
$prev = $mth-1; } Ten post edytował fifi209 28.03.2009, 10:06:39 -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kod $_GET['mth'] $mth = (int) $_GET['mth']; Zostanie przekonwertowany na int ;d Ale wtedy będzie to "1", "2"..., zamiast "01", "02" - a to robi różnicę w zapytaniu do bazy danych. Mógłbym zrobić dwa różne zapytania: jeśli $month<10 to niech szuka %-0'.$month.'-%, a jeśli >=10 to po prostu %-".$month.", bez dopisanego 0. Na razie ten pomysł wygrywa (jest trochę mniej kodu niż switch, ale mimo wszystko wolałbym w jakiś sposób być zdolnym do zmieniania "02" na "01"). Edit: Musiałem dopisać dwa zapytania:
I to samo ze zmienną $prev. Nie wiem więc czy switch nie był jednak lepszy. Ten post edytował alkamid 28.03.2009, 13:16:35 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Masakra, to zes wymyslil switcha.
Odejmij po prostu 1 i dopisz ew. zero z przodu. A pozatym jesli trzymasz daty w bazie jako DATE to mozesz uzyc mysqlowej funkcji MONTH() i sobie porownujesz normalnie z 1, 4, 12, 11 -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
A pozatym jesli trzymasz daty w bazie jako DATE to mozesz uzyc mysqlowej funkcji MONTH() i sobie porownujesz normalnie z 1, 4, 12, 11 Świetne, właśnie o to mi chodziło. Wielkie dzięki! To jeszcze jedno: do wyświetlenia listy dostępnych miesięcy używam takiej konstrukcji:
Co też jest trochę głupie, bo muszę robić dwa przypadki dla j od 1 do 9 i od 10 do 12. Skoro już się uporałem z tamtym to tu też mogłyby być liczby w zwykłym formacie: 1,2,3... Wyobrażam sobie to tak:
Tylko w php nie ma funkcji tak samo działającej jak ta w MySQL, tzn. pewnie jest ale ja się nie mogę jej doszukać. Ten post edytował alkamid 28.03.2009, 14:03:25 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
explode" title="Zobacz w manualu PHP" target="_manual ?
albo bardziej poprawnie, ale raczej wolno: strtotime() + date('m') -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 27.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki raz jeszcze!
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 19:48 |