Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja php
gandziorz
post
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:
  1. CREATE TABLE settings (
  2. `id` bigint(5) NOT NULL AUTO_INCREMENT,
  3. `name` text,
  4. `value` text,
  5. PRIMARY KEY (id)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Funkcja w php:
  1. <?php
  2. $settings = array();
  3. $query = "SELECT * FROM ".$DB['db_prefix']."settings";
  4. $result = @mysql_query($query);
  5. while ($row = mysql_fetch_assoc($result)) {
  6. $settings[$row['name']] = $row['value'];
  7. }
  8. $smarty->assign('settings', $settings);
  9. ?>


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?
Go to the top of the page
+Quote Post
wookieb
post
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.
Go to the top of the page
+Quote Post
SirZooro
post
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.
Go to the top of the page
+Quote Post
luck
post
Post #4





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Cytat(gandziorz @ 24.08.2008, 20:29:38 ) *
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)
Go to the top of the page
+Quote Post
gandziorz
post
Post #5





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.12.2006

Ostrzeżenie: (0%)
-----


Zrobiłem ciutkę inaczej:

  1. <?php
  2. $settings = array();
  3. $query = "SELECT * FROM ".$DB['db_prefix']."settings";
  4. $result = @mysql_query($query);
  5. while ($row = mysql_fetch_assoc($result)) {
  6. $settings = array($row['name'] => $row['value']);
  7. }
  8. $smarty->assign('settings', $settings);
  9. ?>

Funkcja działa jakby szybciej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
wlamywacz
post
Post #6





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Dlaczego tworzysz tutaj tworzysz tablice z tablicy ? Wrzuć tablice otrzymaną z zapytania do bazy i w smarty wyświetl ją funkcją.
Go to the top of the page
+Quote Post
gandziorz
post
Post #7





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.12.2006

Ostrzeżenie: (0%)
-----


Cytat(wlamywacz @ 25.08.2008, 15:07:46 ) *
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
Go to the top of the page
+Quote Post
TrevorGryffits
post
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ę.
Go to the top of the page
+Quote Post
gandziorz
post
Post #9





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.12.2006

Ostrzeżenie: (0%)
-----


Cytat(TrevorGryffits @ 27.08.2008, 14:39:34 ) *
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
Go to the top of the page
+Quote Post
bim2
post
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.
Go to the top of the page
+Quote Post
Driver
post
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)
Go to the top of the page
+Quote Post
gandziorz
post
Post #12





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.12.2006

Ostrzeżenie: (0%)
-----


Cytat(Driver @ 28.08.2008, 09:20:52 ) *
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.
Go to the top of the page
+Quote Post
Daron
post
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. 
Go to the top of the page
+Quote Post

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: 24.08.2025 - 05:18