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 № 1Przyjął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:
- 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ł) - a następnie, odnośnie wyniku zapytania (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
- jeśli znaleziono tylko najnowszą wygraną lub przegraną, użytkownik zawsze wygrywał lub zawsze przegrywał, po prostu policz liczbę jego gier
- w innym przypadku nie było żadnych gier
- jeśli zostanie znaleziona zarówno najnowsza wygrana, jak i ostatnia przegrana, policz gry pod warunkiem, że
Polecam dodanie kolumny do modelu użytkownika, będzie lepiej, gdy trzeba będzie wyświetlać całą tabelę graczy i ich kolejne wygrane / przegrane.