Cache - Baza danych

2011-12-19 21:08:07 Post #1 gość_xxdrago

 
Mam dane pobrane z bazy np.
$data_dodania
$tresc
$tytul
I jak to mam "zacachowac" a zarazem wykorzystać.

Pozdrawiam

2011-12-20 10:26:02 Post #2 nospor

 
Normalnie, z PW wiem że chodzi ci o newsy. Załóżmy więc, ze na stronie głównej wyświetlasz 5 ostatnich newsów i je chcesz dodać do cache. Wczytujesz więc newsy do tablicy i zapisujesz w cache tablice
<?php
//Obiekt nalezy do grupy queries
$news = $cache->Get('mainpagenews', '@queries');
if (is_null($news)){
  $sql = 'select * from news order by date desc limit 5';
  $res = mysql_query($sql) or die(mysql_error());
$news = array();
  while ($row = mysql_fetch_array($res)){
      $news[]= $row;
  }	
	$cache->Put('mainpagenews', $news, '@queries');
}

//a tu obrabiasz tablicę $news jak ci się podoba
//.......
?>

2011-12-20 12:33:34 Post #3 gość_xxdrago

 
[php$news = $cache->Get('mainpagenews', '@queries'); [/php]

Rozumiem , że to mainpagenews to jest nazwa to co wkładam do cache?
no i co to jest @queries?

2011-12-20 12:39:03 Post #4 nospor

 
Ad1) Tak
ad2) Zapoznaj się z plikiem exmaple.php z paczki. Masz to tam wszystko wyjaśnione

2012-02-23 15:53:08 Post #5 gość_XxDrago

 
Ja muszę tutaj 2 razy powtórzyć tą pętle? (while)

Kurde, przydatne masz te klasy

2012-02-23 15:57:21 Post #6 nospor

 
Czemu powtórzyć? jedno while pobierane dane z bazy i przygotowuje ci tablicę, którą zapisujesz w cache.

A potem by wyświetlić te dane to tak, musisz użyć pętli, np. FOREACH.

Jakbyś używał standardowo oddzielenia logiki aplikacji od widoku, to takie rzeczy by były normalne, że najpierw z bazy pobierasz dane, potem je przekazujesz do widoku i widok je przetwarza (też przy użyciu pętli)

2012-03-06 15:51:13 Post #7 gość_xxdrago

 
Dobra chyba czaje więc mam takie coś:

$dane = 'SELECT * FROM `newsy_strony` WHERE typ =1 ORDER BY `data` DESC limit ' . $start . ',' . ($end - $start + 1);

$sql = $db->query($dane);

if (komentarze_on_off() == true) {
$komentarze = 1;
} else {
$komentarze = 0;
}

while ($news = $sql->fetch_assoc()) {
$bb = new BbCode(); // Dodanie BB-CODE
$bb->parse($news['tresc']); // Prasowanie
$length = 500; // Sktracanie tekstu...
$cutText = $bb->cutText($length);
$tpl->set_var('nazwa', znaki('znaki', $news['nazwa']));
$tpl->set_var('link', seo_link($news['nazwa']));

$tpl->set_var('id', $news['id']);
$tpl->set_var('tresc', $cutText);
$tpl->set_var('autor', $news['autor']);
$tpl->set_var('data', $news['data']);

if ($komentarze == 1) {
// Pokazuje ilosc komentarzy..
$zap = 'SELECT COUNT( * ) FROM komentarze WHERE id =' . $news['id'];
$zape = $db->query($zap);
$row = $zape->fetch_assoc();
$komenty = $row['COUNT( * )'];
$tpl->set_var('coments', $komenty . ' ' . nazwa($komenty));
} else {
$tpl->set_var('coments', '');
}

$tpl->parse("NEWS", true);
}


Wkładam wszystko do tablicy . if (is_null($news)){ - rozumiem , że tym sprawdzam czy dane są
w pamięci podręcznej. No ale jak mogę pobrać, potem te dane z pamięci do wyświetlenia?

2012-03-06 16:07:41 Post #8 gość_xxdrago

 
$news = $cache->Get('news', '@queries');
if (is_null($news)) {
    $sql_pager = $db->query('SELECT count( * ) FROM newsy_strony');
    $row = $sql_pager->fetch_array();
    $news = array();
    $news['ilosc_rekordow'] = $row['0'];

    $cache->Put('news', $news, '@queries');
}
echo $news['ilosc_rekordow'];


O to chodzi?

2012-03-06 16:28:24 Post #9 nospor

 
Nie bardzo czaje jak się ma pierwszy kod do drugiego.

Jeśli zaś w drugim kodzie w cache chciałeś przechowywać tylko liczbę rekordów, to tak, o to chodziło.

2012-03-06 16:41:22 Post #10 gość_xxdrago

 
Sam nie wiem po co dałem ten pierwszy kod

A tak, pobocznie się jeszcze chciałem spytać, da się usunąć jednym zapytaniem wszystkie rekordy o podanym np. id ? Chodzi mi o to , że mam np. 5 rekordów o tym samym id i chce je usunąć jednym zapytaniem.

2012-03-06 16:45:48 Post #11 nospor

 
No to zwykłe DELETE z WHERE.

2012-03-06 17:49:18 Post #12 gość_xxdrago

 
if (is_null($news)) {
    $sql = $db->query($dane);
    while ($newss = $sql->fetch_assoc()) {
        $bb = new BbCode();     // Dodanie BB-CODE
        $bb->parse($newss['tresc']); // Prasowanie
        $length = 500; // Sktracanie tekstu...
        $cutText = $bb->cutText($length);

        $news['nazwa'] = znaki('znaki', $newss['nazwa']);
        $news['link'] = seo_link($newss['nazwa']);
        $news['id'] = $newss['id'];
        $news['tresc'] = $cutText;
        $news['autor'] = $newss['autor'];
        $news['data'] = $newss['data'];
    }
    $cache->Put('news', $news, '@queries');
}


Tak wrzucam newsy, do cache tylko jest taki problem bo nie wiem dlaczego dodaje mi tylko jeden rekord do tablicy $news , jakby się nadpisują a chyba wszystko tutaj mam dobrze..

2012-03-06 19:39:32 Post #13 nospor

 
No bo za każdym razem nadpisujesz..... Tak ma być - masz dopisywać a nie nadpisywać.
<?php
 while ($newss = $sql->fetch_assoc()) { 
        $news[]= array(
'nazwa' => 'blabla',
'link' => 'blabla',
......
);
}
?>

2012-03-06 21:08:16 Post #14 gość_xxdrago

 
Ładnie wszystko gra tylko jak teraz zrobić aby jeszcze pager działał ?

2012-03-07 08:30:08 Post #15 nospor

 
No nie wiem... może zacząć od jego podpięcia?

2012-03-07 18:23:52 Post #16 gość_xxdrago

 
To mam wszystko ten tego,
http://pastebin.com/VFfbN0KN

Tylko w ogóle nie czaje jak to podpiąć pod tablice, ładnie mi wszystko cykało ten tego jak miałem to zrobione pod mysql... No ale teraz jak to odpaliłem z tą klasą cache to mi się to podobać zaczyna

echo 'Ostatnia strona to: ' . ($pager_Array[Pager::GOTO_LAST][Pager:AGE]);
- To też nie wiem do czego to jest...

PS: dzięki za pomoc. ("Nospor - przeciw problemowy")

2012-03-08 08:57:05 Post #17 nospor

 
Pod jakie znowu tablice?

2012-03-08 11:15:52 Post #18 gość_xxdrago

 
No skrypt wygląda tak jak dałem wcześniej link, no i nie wiem, jak mam to wszystko ogarnąć.


Wydaje mi się , ze podczas wyświetlania zdało by się dać jakiś limit w foreach .
foreach ($news as $baza) {
    $tpl->set_var('nazwa', $baza['nazwa']);
    $tpl->set_var('link', $baza['nazwa']);
    $tpl->set_var('id', $baza['id']);
    $tpl->set_var('tresc', $baza['tresc']);
    $tpl->set_var('autor', $baza['autor']);
    $tpl->set_var('data', $baza['data']);
    $tpl->set_var('coments', $baza['komentarze']);
    $tpl->parse("NEWS", true);
}


No i też nie wiem jak to tutaj po ustawiać... Wydaje mi się ze wszystko jest ok, ale nie działa tak jak trzeba to znaczy nie wyświetla się pager.
$pager_ = new Pager('idPagera');
$pager_->SetTotalRecords($pager['ilosc_rekordow']);
$pager_->SetRecordsPerPage(9);
$pager_->SetPagesPerNav(5);
$pager_->Make(true);
$pager_Array = $pager_->GetArray();
echo 'Ostatnia strona to: ' . ($pager_Array[Pager::GOTO_LAST][Pager:AGE]);
$pag = $pager_->Render();
$indexStart = $pager_->GetIndexRecordStart();
$indexEnd = $pager_->GetIndexRecordEnd();
print_r ($pager_Array);
$news = $cache->Get('news', '@queries');


Jak bym coś nie jasno pisał to pisz..

2012-03-08 11:23:40 Post #19 nospor

 
Ale ja nie wiem o jakie tablice ci chodzi. O jaki limit w foreach.

2012-03-08 11:26:00 Post #20 gość_xxdrago

 
Aaa, chodziło mi o podpięcie moich tablic tych $news do pagera.

Odpowiedz

1 2 3 >

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer