Wpis z mikrobloga

Jak napisać w Eloquent Laravela, sortowanie po ilości komentarzy malejąco i po dacie dodania posta.

W przypadku 2 tabel Post i Comment. Relacja 1:N $post->comments();

np.

Post(21 grudzień, 8 komentarzy)

Post(23 grudzień, 8 komentarzy)

Post(8 grudzień, 4 komentarzy)

#webdev #php #laravel
  • 17
  • Odpowiedz
@bonus: „Keszuj” sobie liczbę komentarzy w

Post
– dodajesz komentarz to zwiększasz licznik, usuwasz to zmniejszasz. Co jakiś czas przelatujesz całość, żeby upewnić się, że liczniki są OK.

Po co? Bo wtedy sortowanie jest proste i szybkie, bez potrzeby joinowania komentarzy.
  • Odpowiedz
@MacDada: Nie wiem czy szybsze :)

co jakiś czas przelatujesz liczniki


Bez sensu tworzyć nową kolumnę w bazie dla postów, a co jeśli chce zrobić jeszcze kilka takich sortowań dla innych
  • Odpowiedz
@bonus: jedno z najgorszych mozliwych wydajnościowo rozwiązań, ale jak chcesz. Pomysł od MacDada był prosty i skuteczny, przesadna normalizacja jest o kant pupy czasem, warto sobie takie nadmiarowe dane przechowywać i raz na pare godzin zaktualizować z crona.
  • Odpowiedz
To samo zapytanie z orderBy(DB::raw("COUNT(comments.postid)"), "DESC")

(141 total, Wykonanie zapytania trwało 0.0004 sekund(y))


Zapytanie bez orderBy(DB::raw("COUNT(comments.post
id)"),
  • Odpowiedz
@bonus: ale wiesz, ze ja nie mam zamiaru sie sprzeczać, nic mi nie udowodnisz, zwłaszcza przy takich ilościach :) ja bym po prostu tak nie zrobił :) kolega wyżej dał dobry pomysł, ale widze, że już masz własny i szukasz akceptacji ;)
  • Odpowiedz
@uirapuru: Ja też nie chcę się sprzeczać, wolałbym się nauczyć czegoś nowego. :D Po prostu to rozwiązanie kolegi wyżej to trochę makaron i nie wnosi dobrych praktyk. Jeśli moje rozwiązanie byłby rzeczywiście znacznie wolniejsze chętnie bym skorzystał z tamtego.
  • Odpowiedz
@bonus: mozesz robić tak, możesz keszować dane. Mało tego - możesz między laravela a mysqla wstawić nosqla. Możesz trzymać w sesji. Pierdyliard rozwiązań, ale przy skali 140 postów to faktycznie - żadne nie pokaże pazura.
  • Odpowiedz
Myślę, że wydajność nie spadła aż tak drastycznie. Test robiony na 140 postach :)


@bonus: Przy tylu faktycznie nie ma znaczenia – wybierz tę metodę, która jest dla Ciebie najwygodniejsza.

  • Odpowiedz