Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Co będzie wydajniejsze...
MrocznyKalafior
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 2.04.2009

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


Witam,
Mam zamiar dodać do strony oceny komentarzy i nie za bardzo wiem jaką drogę wybrać. Mam dwie możliwości, po pierwsze stworzyć oddzielną tabele gdzie będą przechowywane głosy, zliczanie odbywało by się na zasadzie: zlicz głosy gdzie id komentarza i głos na + (i user id takie jak ...) lub do istniejącej już tabeli komentarzy dodać rekordy ocena na plus, ocena na minus i zapisywać w nich zserializowane ID głosujących userów. Z tego co wiem MySql jest dużo szybszy, była by oszczędność transferu, bo pobierał bym już przygotowane dane, a nie dopiero obrabiał zserializowaną tabele, ale czy tak jest na pewno?

Ten post edytował MrocznyKalafior 8.07.2010, 09:50:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Połączenie pierwszego i drugiego.
W jednej tabeli (z głosami) przechowujesz głosy
W drugiej tabeli (z komentarzami) i tak buforujesz wynik głosowania (po co liczyć za każdym razem) który w razie potrzeby (np coś Ci się nie zgadza, chcesz przeliczyć głosy od nowa, błędy na bazie) przeliczysz jeszcze raz.

Oczywiście współdziałanie tabel możesz obsłużyć za pomocą Triggerów

Ten post edytował wookieb 8.07.2010, 09:48:21
Go to the top of the page
+Quote Post
MrocznyKalafior
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 2.04.2009

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


Dzięki!
I sorry za małe zamieszanie znalazłem parę postów niżej podobny temat i nie chciałem dublować, ale widzę dostałem odpowiedź w niespotykanym tempie (IMG:style_emoticons/default/winksmiley.jpg)

Dobra poczytałem trochę o triggerach ale dalej nie mogę pojąć tego na tyle aby zaimplementować to w swoim skrypcie.

  1.  
  2. delimiter |
  3. CREATE TRIGGER countvotecomment AFTER UPDATE ON wp_comment_vote
  4. FOR EACH ROW BEGIN
  5. UPDATE wp_commentmeta
  6. IF NEW.meta_key = 'vote_comment_in_minus' THAN
  7. SET NEW.meta_value = (SELECT COUNT( value ) AS glosy FROM wp_comment_vote WHERE comment_id=OLD.comment_id AND value = '-1') WHERE NEW.comment_id = OLD.comment_id;
  8. ELSEIF NEW.meta_key = 'vote_comment_in_plus' THAN
  9. SET NEW.meta_value = (SELECT COUNT( value ) AS glosy FROM wp_comment_vote WHERE comment_id=OLD.comment_id AND value = '1') WHERE NEW.comment_id = OLD.comment_id;
  10. END;
  11. |delimiter ;
  12.  


Niestety to powyższe nie działa, może ktoś podpowiedzieć jak to zapytanie powinno wyglądać.

ZAJE*** udało się (IMG:style_emoticons/default/guitar.gif)

Tylko teraz mam jeszcze jedno pytanie.
W składni mamy :
  1. FOR EACH ROW

co oznacza, że działanie zostanie wywołane dla każdej linijki w tabeli którą aktualizowaliśmy (na przykład)?
Jeżeli tak to czy jest jakaś składnia która umożliwi wywołanie TRIGGERA TYLKO dla aktualizowanego wiersza?

Ten post edytował MrocznyKalafior 8.07.2010, 16:03:54
Go to the top of the page
+Quote Post
wookieb
post
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie.
To oznacza
http://www.richnetapps.com/a_very_fast_int...n_mysql_trigge/
Cytat
For each row means this trigger will be activated for each inserted action.
Go to the top of the page
+Quote Post
MrocznyKalafior
post
Post #5





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 2.04.2009

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


No to luksus, dzięki za podpowiedź.
Go to the top of the page
+Quote Post

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: 15.09.2025 - 12:18