Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Efektowna tabela z ustawieniami
meron11
post
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 17.08.2009

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


Potrzebuję waszej porady odnośnie stworzenia tabeli .Potrzebuję tabelę w której będą przechowywane ustawienia np: ilosc artykułów na www =5 (wartosć).Chodzi mi o to jak to najefektywniej zrobić pod względem łatwości odczytu myślałem o :
  1. CREATE TABLE `mer_za_pl`.`ustawienia` (
  2. `id` INT NULL AUTO_INCREMENT ,
  3. `ustawienie` TEXT NOT NULL ,
  4. `wartość` TEXT NOT NULL ,
  5. PRIMARY KEY ( `id` )
  6. ) ENGINE = MYISAM ;


tylko jak potem efektywnie odczytywać wartości ustawień?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 20)
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


no jeżeli zależy Ci na efektywności to może warto by je zapisywać do pliku? kilka wartości łatwo przechowasz w pliku no i nie musisz łączyć się z bazą, żeby je wyciągać tylko zainkludujesz sobie plik, możesz trzymać je w tablicy
Go to the top of the page
+Quote Post
sebekzosw
post
Post #3





Grupa: Zarejestrowani
Postów: 437
Pomógł: 42
Dołączył: 16.04.2007

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


najłatwiej będzie tak moim zdaniem:

  1. CREATE TABLE `sp_cms_ustawienia` (
  2. `cms_tytul_strony` varchar(50) collate utf8_polish_ci NOT NULL COMMENT 'Tytuł strony (<title></title>)',
  3. `cms_opis_strony` text collate utf8_polish_ci NOT NULL COMMENT 'Opis strony (meta descripion)',
  4. `cms_artykulow_limit` int(11) NOT NULL COMMENT 'Liczba artykułów na stronie'
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;


potem wyciągasz tak:

  1. $ustawienia = mysql_fetch_assoc(mysql_query("SELECT * FROM `sp_cms_ustawienia`;"));


a potem to już z górki bo w odpowiednim miejscu wpisujesz:
  1. $ustawienia['cms_artykulow_limit'];


pozdrawiam


EDIT: tehaha ma rację - jeżeli strona będzie miała duży ruch to za każdym razem będzie Ci się wykonywało zapytanie.

Ten post edytował sebekzosw 26.06.2010, 12:05:55
Go to the top of the page
+Quote Post
sadistic_son
post
Post #4





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Jeśli wartość to liczba to używaj typu danych INT. Jeśli ustawienie to niewielka ilość tekstu to używaj VARCHAR(xx).
Odczytywałbym to tak:

TABEALA: ustawienia

ustawienie | wartosc
ilosc_art | 5
ograniczenie_czasowe | 30
zezwalaj_na_usuwanie | 0
ilosc_czegostam | 230

ODCZYT:
  1. $sql="SELECT * FROM ustawienia WHERE ustawienie='ilosc_art' LIMIT 1";
  2. $ilosc_artykulow=mysql_result(mysql_query($sql));


Itd dla kazdego ustawienia.
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
EDIT: tehaha ma rację - jeżeli strona będzie miała duży ruch to za każdym razem będzie Ci się wykonywało zapytanie.

IMHO i tak lepiej w pliku. Czymś takim - wbrew pozorom - da się naprawdę łatwo zarządzać (vide: parse_ini_file albo var_export).

Jeśli zastosuje się natywną składnię PHP i na serwerze jest zainstalowany jakiś akcelerator, to taka konfiguracja będzie wczytywana w ułamku sekundy.
Go to the top of the page
+Quote Post
meron11
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 17.08.2009

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


Jeszcze jakieś sugestie?Skłąniam raczej się w sronę mysql bo tak w duzych skryptach jest ale jak macie jakieś ciekawsze propozycje to proszę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
tehaha
post
Post #7





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Cytat(meron11 @ 26.06.2010, 18:51:46 ) *
mysql bo tak w duzych skryptach jest

trochę słaby argument, poza tym sam sobie to przemyśl, jeżeli to jakiś duży system to żeby wyciągnąć ustawienia musisz wykonać przynajmniej jedno zapytanie dla każdego użytkownika, 1000 użytkowników to 1000 zbędnych połączeń do bazy, i nie myśl, że przechowywanie tego w pliku jest jakoś bardziej skomplikowane albo mniej elastyczne bo kiedy pobierasz sobie te ustawienia np. funkcją mysql_fetch_assoc() to wyciągasz tablicę z danymi, i dokładnie taką samą tablicę możesz trzymać w pliku z taką różnicą, że nie ma tego zbędnego połączenia z bazą danych i zmniejszy to czas ładowania oraz obciążenie serwera w godzinach szczytowych
Go to the top of the page
+Quote Post
gothye
post
Post #8





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


Ja również jestem za trzymaniem danych w pliku ,biorąc np fakt zapisu/aktualizacji wykonująć to za pomocą SQL rekordów wiąrzę sie to z dużą liczbą wykonywanych zapytań do SQL
Go to the top of the page
+Quote Post
erix
post
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
mysql bo tak w duzych skryptach jest ale jak macie jakieś ciekawsze propozycje to proszę

Ale tam jest od razu cache'owanie tego czegoś.

Jeśli dobrze przemyślisz aplikację, uda Ci się osiągnąć connect-on-demand, a każdorazowe wczytywanie konfiguracji z bazy jest raczej strzałem w stopę. (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Trzymaj to byle gdzie byleby ostatecznie trafiło to na stałe do pamięci RAM. Możesz to zrobić idąc za radą exira:
Cytat
Jeśli zastosuje się natywną składnię PHP i na serwerze jest zainstalowany jakiś akcelerator, to taka konfiguracja będzie wczytywana w ułamku sekundy.
Lub korzystając z funkcji zapisu/odczytu z pamięci (udostępnianych przez takie akceleratory).

Googleuj za APC i podobnymi.
Go to the top of the page
+Quote Post
erix
post
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Lub korzystając z funkcji zapisu/odczytu z pamięci (udostępnianych przez takie akceleratory).

Ale po co wtedy? Tylko sobie utrudniasz życie, bo trzeba za każdym razem sprawdzać, czy te dane faktycznie się tam znajdują. A jak masz wszystko w kodzie zwyczajnej tablicy, to dopalanie przebiega przezroczyście - akcelerator sam analizuje co, kiedy, gdzie i czy w ogóle cache'ować.
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


W przypadku gdyby przykładowo konfiguracja jednak miała znajdować się w bazie danych. I tak... rozwiązanie z plikiem+akceleratorem jest bardzo wygodne i wydajne - również je polecam.
Go to the top of the page
+Quote Post
meron11
post
Post #13





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 17.08.2009

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


Jednak wziełęm mysql bo niebędę miał dużo zapytań na raz a pomysł "sebekzosw" tylko dodaje jedno zapytanie no ale tworzę bazę tak :
  1. $sql = "CREATE TABLE `ustawienia` (
  2. `tytul_strony` tinytext NOT NULL COMMENT 'Tytuł strony (<title></title>)',
  3. `opis_strony` text NOT NULL COMMENT 'Opis strony (meta descripion)',
  4. `artykulow_limit` int(10) NOT NULL COMMENT 'Liczba artykułów na stronie',
  5. `znakow_limit` int(20) NOT NULL COMMENT 'Liczba znaków skracających tytuł'
  6. ) ;";
wszystko isę tworzy i teraz pytanie jak edytować tka zbudowaną bazę (poszczególne wartości) ?

Ten post edytował meron11 26.06.2010, 21:59:05
Go to the top of the page
+Quote Post
kapuch
post
Post #14





Grupa: Zarejestrowani
Postów: 389
Pomógł: 69
Dołączył: 26.04.2010
Skąd: Łódź

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


Cytat(meron11 @ 26.06.2010, 21:45:34 ) *
Jednak wziełęm mysql bo niebędę miał dużo zapytań na raz a pomysł "sebekzosw" tylko dodaje jedno zapytanie no ale tworzę bazę tak :
  1. $sql = "CREATE TABLE `ustawienia` (
  2. `tytul_strony` tinytext NOT NULL COMMENT 'Tytuł strony (<title></title>)',
  3. `opis_strony` text NOT NULL COMMENT 'Opis strony (meta descripion)',
  4. `artykulow_limit` int(10) NOT NULL COMMENT 'Liczba artykułów na stronie',
  5. `znakow_limit` int(20) NOT NULL COMMENT 'Liczba znaków skracających tytuł'
  6. ) ;";
wszystko isę tworzy i teraz pytanie jak edytować tka zbudowaną bazę (poszczególne wartości) ?

No chyba UPDATE??
Go to the top of the page
+Quote Post
meron11
post
Post #15





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 17.08.2009

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


//edit :

  1. $query="UPDATE `ustawienia` SET tytul_strony='aaaaaa', opis_strony='super dupy!', artykulow_limit='10', znakow_limit='50'";
takie zapytanie niechodzi ;/

Ten post edytował meron11 26.06.2010, 22:37:30
Go to the top of the page
+Quote Post
Crozin
post
Post #16





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Po pierwsze: taka baza to chory pomysł - 200 zmiennych konf. i 200 kolumn? Normalna tabela z dwiema kolumnami: name, value - value jako TEXT - zmiennym nietekstowym nic się nie stanie jak będą jako tekst zapisane.
Go to the top of the page
+Quote Post
thek
post
Post #17





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Jak dla mnie? Najlepiej zapisać konfigurację do pliku jako tablicę, a sam plik potem tylko includujemy. Chyba prościej zrobić sobie:
  1. <?php
  2. $_CONFIG['parametr1'] = 'wartosc';
  3. $_CONFIG['parametr2'] = 'wartosc';
  4. $_CONFIG['parametr3'] = 'wartosc';
  5. $_CONFIG['parametr4'] = 'wartosc';
  6. ?>
lub nawet lepiej
  1. <?php
  2. $_CONFIG =array(
  3. 'parametr1' => 'wartosc',
  4. 'parametr2' => 'wartosc',
  5. 'parametr3' => 'wartosc',
  6. 'parametr4' => 'wartosc'
  7. );
  8. ?>

i w dowolnym pliku zrobić
include 'nasz_konfig.php';

Ale skoro się upierasz to zrób tak jak choćby ja w niektórych projektach, ale zaznaczam, że są one małe i wiem, że rzadko stosowane. Wolę pliki (IMG:style_emoticons/default/smile.gif)
Struktura tabeli: parametr (varchar 25 - unique), wartosc( varchar 75),
Wrzucam odpowiednie pary.Wyciągam rekordy poprzez odpowiedni WHERE lub... wyciągam całą tabelę i robię mniej więcej tak:
  1. $_CONFIG = array();
  2. $result = mysql_query( 'SELECT * FROM tabela_konfigu' );
  3. while( $row = mysql_fetch_assoc( $result ) ) {
  4. $_CONFIG[ $row[ 'parametr' ] ] = $row[ 'wartosc' ];
  5. }
Oczywiście dane z bazy sprawdzam czy istnieją (odpowiednie IF i mysql_num_rows). Tu tylko dałem szybki szablon jak zrobić sobie tablicę z danymi konfiguracyjnymi jeśli koniecznie chcemy bazę do tego zaprząc.
Go to the top of the page
+Quote Post
meron11
post
Post #18





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 17.08.2009

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


plik.... jak go poem zeedytuje z poziomu php ?...
Go to the top of the page
+Quote Post
tehaha
post
Post #19





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


najprościej to tak:
  1. $config = array
  2. (
  3. 'news_per_page'=>10,
  4. 'page_title'=>'tytuł strony'
  5. );
  6. //zapis tablicy do pliku
  7. $file = fopen($filename, 'w+') or die("Nie można otworzyć pliku.");
  8. fwrite($file, serialize($config));
  9. fclose($file);
  10.  
  11. //odczyt tablicy z pliku
  12. $config = unserialize(file_get_contents($filename));
  13. print_r($config);

a z wpisywaniem danych do tablicy już sobie chyba poradzisz
Go to the top of the page
+Quote Post
Quantum
post
Post #20





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


dodatkowo zamiast trzech linijek do zapisu pliku można użyć file_put_contents (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował Quantum 27.06.2010, 11:47:55
Go to the top of the page
+Quote Post
meron11
post
Post #21





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 17.08.2009

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


thx ,close (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 6.10.2025 - 02:12