Cache - Baza danych

2011-12-19 21:08:07 Post #1 guest_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 guest_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 guest_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 guest_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 guest_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 guest_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 guest_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 guest_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 guest_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 guest_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 guest_xxdrago

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

Answer

1 2 3 >

Categories

  1. wszystkie wszystkie komentarze all (1)