![]() |
![]() |
![]()
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 |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 08:20 |