/ / Jak mogę obliczyć kolejne elementy w bazie danych używając Railsów? - ruby-on-rails, baza danych

Jak mogę obliczyć kolejne elementy w bazie danych za pomocą Railsów? - rubin na szynach, baza danych

Czy istnieje sposób, aby wysłać zapytanie do bazy danych, aby zwrócić tylko te elementy, które wystąpiły sukcesywnie (w czasie) zgodnie z ustawioną zmienną?

W szczególności muszę się dowiedzieć, ile razy użytkownik wygrał grę z rzędu. Gry są przechowywane w bazie danych z atrybutem win_loss (1 to wygrana, 0 to przegrana).

Chciałbym sprawdzić, czy użytkownik wygrał 3 gry z rzędu. Czy jest na to sposób w bazie danych?

Jeśli nie, jak by to wyglądało w aplikacji?

Z góry przepraszam, jeśli jest to mylące. Proszę o zadawanie pytań, a ja postaram się to wyjaśnić. Używam Ruby on Rails.

Odpowiedzi:

2 dla odpowiedzi № 1

Przyjąłbym inne podejście. Dodałbym kolumnę consecutive_wins do twojego modelu użytkownika (liczby ujemne mogą reprezentować kolejne straty, jeśli również tego potrzebujesz).

EDYTUJ: jeśli naprawdę potrzebujesz zapytać ...

Dwa zapytania:

  1. wybierz najnowsze zwycięstwo i najnowsze luźne dla danego użytkownika (można to zrobić jednym zapytaniem, w SQL SELECT max(created_at) AS newest, win_loss FROM games GROUP BY win_loss (Nie pamiętam teraz, jak wykonywać funkcje grupowania w Railsach, ale powinieneś mieć pomysł)
  2. a następnie, odnośnie wyniku zapytania (1):
    1. jeśli zostanie znaleziona zarówno najnowsza wygrana, jak i ostatnia przegrana, policz gry pod warunkiem, że created_at > newest_win AND created_at > newest_lose
    2. jeśli znaleziono tylko najnowszą wygraną lub przegraną, użytkownik zawsze wygrywał lub zawsze przegrywał, po prostu policz liczbę jego gier
    3. w innym przypadku nie było żadnych gier

Polecam dodanie kolumny do modelu użytkownika, będzie lepiej, gdy trzeba będzie wyświetlać całą tabelę graczy i ich kolejne wygrane / przegrane.