Jak poprawnie napisać query ciągnące wyniki z bazy i zliczające wyniki po kategoriach

0

Hej, potrzebuje nie tylko pobrać z bazy danych wyniki spełniające określone kryteria (np. cena od i do, status PENDING LUB CLOSED itp.) ale również zliczyć je po tych kategoriach - tak jak to robi Allegro (screen).

Screenshot_20240505-012722.jpg

Jak to poprawnie zrobić? Rozumiem że oprócz mojego głównego query które filtruje wyniki, powinienem napisać drugie query które oprócz filtrowania, robi dodatkowe grupowanie i zliczanie. Jednak tutaj też musiałbym to robić w odpowiednim momencie bo np jeśli wybiorę "wysyłka z Polski", to Allegro wciąż pokazuje pozostałe opcje i ich ilość więc musiałbym zrobić grupowanie które pomija filter po miejscu wysyłki. Byłbym wdzięczny za wszelkie wskazówki, materiały czy przykłady jak to poprawnie napisać (pracuje z typeorm i postgresql)

0

Ja do tego podszedłbym iteracyjnie oraz z testami automatycznymi. Zacząłbym os testu na to że zwracane są filtrowane wyniki, potem dodałbym test na to czy w aktualnej kategorii coś jest (true, false), potem zmieniłbym test żeby zwróciło ilość aktualnej kategorii, potem test na to czy w jednej innej kategorii coś jest, potem znowu zmieniłbym test na to żeby zwróciło ilość zamiast bool, i finalnie test pod wszystkie kategorie. Stosując taki proces wyszłoby mi gotowe rozwiązanie, które myślę że byłoby dobre. Być może byłoby to jedno query, być może nie.

A pomijając proces i wracając do pytania, to chyba warto wpisać w Google "how to filter and count by many predicates" czy jakoś tak.

0

Potrzebujesz mieć najpier wyniki a potem posumowane po kategorii? No to tak jak piszesz najpierw filtrowanie a potem to samo zapytanie z grupowaniem po kategorii i zliczaniem. Baza danych zrobi to najlepiej.

0

OK faceting to jest to czego potrzebuję. Widzę że nie jest to proste do zrobienia w postgresql żeby działało szybko więc chyba zrobię naiwnie i będę grupował każdą kategorie. Pytanie tylko ile to faktycznie może zająć jeśli mam np. 10k wyników w bazie i np. 3 kategorie:

  • type - trzy różne wartości
  • category - 20 różnych wartości
  • tags - 200 różnych wartości przy czym jeden wynik może mieć wiele tagów.

Ktoś wie czy to będzie wymagające dla bazy danych czy raczej przy 10k obiektów powinno być git?

0

Pokaz te sql bo przy 10 tys to to powinno szybko działać na zegarku. Moze trzeba jakieś ideksy dołożyć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1