Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja kodu, instrukcja switch
alkamid
post
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:
  1. SELECT DATA, wartosc FROM fw WHERE DATA LIKE "%-'.$_GET['mth'].'-%" ORDER BY DATA ASC;

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ę:
  1. SELECT wartosc FROM fw WHERE DATA LIKE "%-'.$prev.'-%" ORDER BY DATA DESC LIMIT 1 ;


Niestety, zmienną $prev otrzymuję w nieelegancki sposób, a mianowicie instrukcją switch:
  1. <?php
  2. switch($_GET['mth']) { // ustawienie poprzedniego miesiąca... jakby to zrobić krócej?
  3.        case '02':
  4.            $prev='01';
  5.            break;
  6.        case '03':
  7.            $prev='02';
  8.            break;
  9.        case '04':
  10.            $prev='03';
  11.            break;
  12.        case '05':
  13.            $prev='04';
  14.            break;
  15.        case '06':
  16.            $prev='05';
  17.            break;
  18.        case '07':
  19.            $prev='06';
  20.            break;
  21.        case '08':
  22.            $prev='07';
  23.            break;
  24.        case '09':
  25.            $prev='08';
  26.            break;
  27.        case '10':
  28.            $prev='09';
  29.            break;
  30.        case '11':
  31.            $prev='10';
  32.            break;
  33.        case '12':
  34.            $prev='11';
  35.            break;
  36.        }
  37. ?>


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?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:10