Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy oplaca sie cachowac zapytania bazy danych, Jesli cachuje dany box
vadergb
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.06.2009

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


Mam takie pytanie

Oplaca sie cachowac zapytania z bazy danych jesli cachuje dany box.


np.
cachuje calego newsa(ilosc komentarzy, autora, kategorie, tagi etc.)

Tak na chlopski rozum nie oplaca sie cachowac zapytan i tego boxu (wtedy najpierw bedziemy musiel cachowac zapytanie a potem dany box - co za tym idzie bezsensu robimy cachowanie bazy).

Jesli moje myslenie jest dobre i w tym przypadku nie oplaca sie cachowac zapytania to mozna zrobic tak z wszystkim tj.

komentarze (nie cachujemy zapytan tylko caly box z komentarzami tj. autor, + dodatkowae opcje(np ilosc znajomych etc))

Patrzac na to cachowanie bazy danych jest zbedne(biorac pod uwage ze np. mysql ma system wlasny cachujacy)...

Jesli sie myle prosze o napisanie co jest bardziej oplacalne(mowimy o tym aby strona chodzila szybciej i mowimy tu o stronie gdzie dziennie jest grubo ponad 100 tys odslon ! )
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vadergb
post
Post #2





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.06.2009

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


Cytat
Cytat
Tak wykonamy robiac petle w petli a gdy chcemy tego uniknac? To jak to mozna optymalnie pobrac?
Przecież jak masz napisaną relację jeden - do-wielu (news - news2cat - cat) wszystko leci jednym zapytaniem i po prostu wyciągasz.


Tu mamy relacje wielu do wielu chyba

1 tabela newsy: [id_news,tytul]
2 tabela kategorie [id_cat,nazwa]
3 tabela news_cat [id_news,id_cat]

mamy 2 newsy
1 => [1,pierwszy news]
2 => [2, drugi news]
mamy 2 kategorie
1=> [1, pierwza kategoraia]
2=> [2, druga kategoria]
rekordy w news_cat:
1=> [1,1](1 news do 1 kategorii)
2=> [1,2](1 news do 2 kategorii)
3=> [2,1](2 news do 1 kategorii)

czyli musimy zrobic
  1. <?php
  2. $query = "SELECT id_news, tytul FROM newsy limit 5";
  3.        $result = mysql_query ( $query );
  4.        while ( ($line = mysql_fetch_array ( $result )) ) {
  5.  
  6. echo 'To jest tytul: '.$line[tytul].'<br />';
  7.    $query1 = "SELECT kategorie.nazwa FROM news_cat, kategorie where news_cat='$line[id_news]' and news_cat.id_cat=kategorie.id_cat";
  8.        $result1 = mysql_query ( $query1 );
  9. echo 'To sa kategorie:';
  10.        while ( ($line1 = mysql_fetch_array ( $result1 )) ) {
  11. echo '$line1[nazwa],';
  12.  
  13.  
  14.        }
  15. ?>


Kod napisany na szybko nie wiem czy dziala chodzilo o to zeby pokazac o co mi chodzi.

takie cos wyswietli nam
1 box:
To jest tytul: pierwszy news
To sa kategorie: Pierwsza kategoria, druga kategoria,
2 box:
To jest tytul: drugi news
To sa kategorie: Pierwsza kategoria

Jak wyswietlic cos takiego bez uzycia petli w petli jak pokazalem to u gory ?
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(vadergb @ 11.06.2009, 12:37:13 ) *
Jak wyswietlic cos takiego bez uzycia petli w petli jak pokazalem to u gory ?

Ja tego typu sprawy rozwiązuję 2 zapytaniami:

Pierwsze:
  1. SELECT id_news, tytul FROM newsy LIMIT 5;

Drugie:
  1. SELECT news_cat, kategorie.nazwa FROM news_cat, kategorie WHERE news_cat IN (SELECT id_news FROM newsy LIMIT 5) AND news_cat.id_cat=kategorie.id_cat;

Potem tylko odpowiednie obrobienie tego w PHP (utworzenie odpowiedniej tablicy) i masz wszystko co trzeba.

Jeżeli Twoja wersja MySQL nie obsługuje LIMITu w podzapytaniu lub chciałbyś się po prostu pozbyć podzapytania to możesz w PHP pobrać wszystkie wyciągnięte id z zapytania pierwszego, przypisać je do tablicy no i potem w PHP:
  1. <?php
  2. mysql_query('SELECT news_cat, kategorie.nazwa FROM news_cat, kategorie WHERE news_cat IN ('.implode(', ', $tab).') AND news_cat.id_cat=kategorie.id_cat');
  3. ?>


Ten post edytował phpion 11.06.2009, 12:37:16
Go to the top of the page
+Quote Post

Posty w temacie
- vadergb   Czy oplaca sie cachowac zapytania bazy danych   10.06.2009, 18:35:39
- - erix   CytatTak na chlopski rozum nie oplaca sie cachowac...   10.06.2009, 19:25:45
- - vadergb   Ale zauwaz ze jak mamy zapisany caly news w cache ...   10.06.2009, 19:48:39
- - erix   No to tym lepiej. ;] Cytatbiorac pod uwage ze np....   10.06.2009, 19:58:04
- - vadergb   Jesli mowisz o frameworkach to one sa zlym wyjscie...   10.06.2009, 20:34:50
- - erix   CytatMowimy o przypadku gdy cachujemy calego boxa ...   10.06.2009, 20:49:40
- - vadergb   Czyli jesli chce zrobic najbardziej wydajna strone...   10.06.2009, 21:06:46
|- - phpion   Cytat(vadergb @ 10.06.2009, 22:06:46 ...   10.06.2009, 21:10:09
- - vadergb   Niby sa niewielki roznice ale gdy jest 1000 osob o...   10.06.2009, 21:29:59
- - fifi209   Jeżeli chcesz mieć szybko pisz własne biblioteki w...   10.06.2009, 21:34:08
- - erix   CytatRóżnice są na tyle niewielkie, ...   10.06.2009, 21:37:39
- - vadergb   CytatCytat Różnice są na tyle niewielkie...   10.06.2009, 21:57:17
- - erix   CytatCzyli powinienem sobie odpuscic PDO? i napisa...   10.06.2009, 22:25:57
- - vadergb   co do CytatPS. O shm/akceleratorach przypominać ch...   10.06.2009, 22:43:24
- - erix   Jeśli chodzi o shm, to i od programisty zależy... ...   10.06.2009, 22:54:10
- - vadergb   CytatCytat Tak wykonamy robiac petle w petli a gdy...   11.06.2009, 11:37:13
|- - phpion   Cytat(vadergb @ 11.06.2009, 12:37:13 ...   11.06.2009, 12:36:38
- - vadergb   Zrobilem cos takiego: [PHP] pobierz, plaintext ...   11.06.2009, 19:23:26


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: 17.10.2025 - 15:29