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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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

 
1
2
3
4
5
6
7
8
9
10
11
$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

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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ć.
1
2
3
4
5
6
7
8
9
<?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

1
echo 'Ostatnia strona to: ' . ($pager_Array[Pager::GOTO_LAST][Pager::PAGE]);
- 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 .
1
2
3
4
5
6
7
8
9
10
11
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
$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::PAGE]);
$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.
1 2 3 >

Odpowiedz