![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Napisałem pewną funkcję do użycia w szablonie smarty. Jeżeli w szablonie użyję $settings.costam to pokaże mi dane z "value" gdzie "name" to costam. Baza sql:
Funkcja w php:
Chodzi o to że przy dużej ilości danych ta funkcja jest niezbyt przyjazna. Ponieważ pobiera wszystkie dane a nie te które potrzebuję. Jakiś pomysł ktoś ma? |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Czy ja wiem... Raz mozesz sciagnac wszystkie ustawienia. Zapisac do tablicy z odpowiednimi kluczami i potem te ustawienia odczytiwac z tablicy.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 32 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Możesz raz zapisać konfigurację do pliku (zaraz po jej modyfikacji) i potem je z niego czytać - poczytaj sobie o funkcjach serialize i unserialize.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 317 Pomógł: 58 Dołączył: 6.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to że przy dużej ilości danych ta funkcja jest niezbyt przyjazna. Ponieważ pobiera wszystkie dane a nie te które potrzebuję. Jakiś pomysł ktoś ma? No to zmodyfikuj funkcję tak, by pobierała tylko wartość która jest Ci w danym momencie potrzebna (dodaj do zapytania jakiś WHERE i LIMIT 1). A już pobrane informacje zapisuj sobie np. w $_SESSION['settings']. Kiedy potrzebujesz użyć jakiejś wartości z tej tabeli, sprawdzasz najpierw czy nie ma jej w sesji. Jeśli nie ma, to odczytujesz z bazy i od razu zapamiętujesz. Kilka drobnych zmian i gotowe (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem ciutkę inaczej:
Funkcja działa jakby szybciej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Dlaczego tworzysz tutaj tworzysz tablice z tablicy ? Wrzuć tablice otrzymaną z zapytania do bazy i w smarty wyświetl ją funkcją.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego tworzysz tutaj tworzysz tablice z tablicy ? Wrzuć tablice otrzymaną z zapytania do bazy i w smarty wyświetl ją funkcją. Ponieważ $settings to nie tylko dane z sql ale także dane dodawane w trakcie działania całego skryptu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Ten post edytował gandziorz 26.08.2008, 22:48:05 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 139 Pomógł: 24 Dołączył: 29.07.2007 Skąd: Tarnowskie Góry Ostrzeżenie: (0%) ![]() ![]() |
Ale teraz za każdym przebiegiem pętli nadpisujesz zmienną $settings, czyli finalnie będzie zawierała ostatnią pobraną parę.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Ale teraz za każdym przebiegiem pętli nadpisujesz zmienną $settings, czyli finalnie będzie zawierała ostatnią pobraną parę. Nie nadpisuję, bo tworzę tablicę. jak w bazie mam wartości: 1 nazwa1 wartosc1 2 nazwa2 wartosc2 To stworzy tablice: $settings = array('nazwa1' => 'wartosc1, 'nazwa2' => 'wartosc2'); I odwołuje się do niej za pomocą np. $settings['nazwa1']. Ten post edytował gandziorz 27.08.2008, 14:15:22 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Nie nie będzie tak. Daj tak jak na początku i poprostu cachuj. Ale nie wierze, żeby jakoś opóźniałoby ci to stronę. Zalezy co trzymasz w settingach.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 26.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Po 1. nie rozumiem po co aż tyle pisać
while ($row = mysql_fetch_assoc($result)) { $settings[$row['name']] = $row['value']; } wystarczy $settings = mysl_fetch_array($result); (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ładowanie nawet 10 tys rekordów to ułamki sekund, więc tym nie masz się co martwić. W samym szablonie smarty wystarczy użyć {$settings.nazwa_wartosci} Co do wybierania tylko tych potrzebnych wartości, to pozostaje zbudowanie odpowiedniego zapytania SQL (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 0 Dołączył: 20.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Po 1. nie rozumiem po co aż tyle pisać while ($row = mysql_fetch_assoc($result)) { $settings[$row['name']] = $row['value']; } wystarczy $settings = mysl_fetch_array($result); (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ładowanie nawet 10 tys rekordów to ułamki sekund, więc tym nie masz się co martwić. W samym szablonie smarty wystarczy użyć {$settings.nazwa_wartosci} Co do wybierania tylko tych potrzebnych wartości, to pozostaje zbudowanie odpowiedniego zapytania SQL (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Niestety nie wystarczy. Sprawdziłem. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 3.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wykorzystaj tzw. leniwą konkretyzację - tj. zastosuj call_user_func (radzę przejsć na obiektówkę) i pobieraj dane dopiero wtedy, kiedy będą one uzywane. Coś jak działanie na eventach -dajmy na to masz studenta ktory jest zapisany na kursy. Ale dopóki nie chcesz wiedzieć ni o tych kursach (chcesz wyswietlic np. tylko jego imie) to nie pobierasz kursów. Przypisujesz tylko event onLoadCourses(), i gdy próbujesz dostać się do tablicy kursów - ona jest wcześniej wypełniana.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 05:18 |