Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Efektowna tabela z ustawieniami
Forum PHP.pl > Forum > Przedszkole
meron11
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ń?
tehaha
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
sebekzosw
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.
sadistic_son
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.
erix
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.
meron11
Jeszcze jakieś sugestie?Skłąniam raczej się w sronę mysql bo tak w duzych skryptach jest ale jak macie jakieś ciekawsze propozycje to proszę smile.gif
tehaha
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
gothye
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
erix
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ę. tongue.gif
Crozin
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.
erix
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ć.
Crozin
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.
meron11
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) ?
kapuch
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??
meron11
//edit :

  1. $query="UPDATE `ustawienia` SET tytul_strony='aaaaaa', opis_strony='super dupy!', artykulow_limit='10', znakow_limit='50'";
takie zapytanie niechodzi ;/
Crozin
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.
thek
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 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.
meron11
plik.... jak go poem zeedytuje z poziomu php ?...
tehaha
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
Quantum
dodatkowo zamiast trzech linijek do zapisu pliku można użyć file_put_contents winksmiley.jpg
meron11
thx ,close smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.