Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co będzie wydajniejsze...
Forum PHP.pl > Forum > Bazy danych > MySQL
MrocznyKalafior
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?
wookieb
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
MrocznyKalafior
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 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ę 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?
wookieb
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.
MrocznyKalafior
No to luksus, dzięki za podpowiedź.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.