![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 30 Dołączył: 9.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabelę, w której w każdym rzędzie przechowuję m.in. datę utworzenia oraz login.
Jako rezultat ma wyjść tabelka - kolumny loginy, wiersze daty a w środku liczba wystąpień w tabeli dla danej daty i danego loginu: data | login1 | login2 | suma 2011-06-18 6 7 13 2011-06-19 2 1 3 Razem: 8 8 16 Na tą chwilę zrobiłem to w sposób taki, że pobieram jednym selectem distinct daty, drugim selectem loginy. Następnie lecę podwójnym foreach i dla każdej daty, wykonuję select count(*) dla każdego loginu. Takie rozwiązanie jest jednak mało wydajne (przy 12 datach i 9 loginach łączny czas zapytania zajmuje 2 sekundy ![]() Może ma ktoś wydajniejszy sposób do przetestowania? Poniżej kod jakby kogoś interesował:
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
najlepiej zacznij od początku - napisz co potrzebujesz uzyskać, a nie to co wydaje Ci się rozwiązaniem, bo najczęściej takie kombinacje są wynikiem źle zaprojektowanej bazy danych
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 30 Dołączył: 9.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Baza zaprojektowana jest dobrze, wydaję mi się tylko, że można to zrobić dużo prościej...
Rozwiązaniem ma być ilość wystąpień loginu usera dla danych dat. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
eh.. nie ma to jak ludzie, którzy nie pozwalają sobie pomóc, słuchaj nikt nie siedzi w Twojej głowie i nikt nie wie co Ty sobie wymyśliłeś, chcesz pomocy? ok, ale podaj strukturę tabel i napisz dokładnie co chcesz z nich pobrać, zapytanie w pętli to bardzo złe rozwiązanie i na 99,9% można to rozwiązać przy pomocy kilku zapytań, bo chociażby zamiast w pętli można dać WHERE IN() a porównanie daty przerzucić na php, ale ciężko powiedzieć coś konkretnego skoro nie podałeś żadnych konkretnych informacji
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 30 Dołączył: 9.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Struktura:
W tabeli `sprawy` podałem tylko niezbędne kolumny. Dane wjeściowe: Data początkowa i data końcowa w formacie unix timestamp Cel: Znaleźć do ilu spraw, dla wszystkich dni zawartych pomiędzy datami wejściowymi, został przydzielony każdy z użytkowników z tabeli users. Generalnie chodzi mi o wyświetlenie tabeli jak poniżej:
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat Baza zaprojektowana jest dobrze No i właśnie nie...cała komplikacja bierze się ze złego typu kolumny w bazie danych, dałeś datę jako INT i nie możesz po niej grupować bo pewnie jest tam inny timestamp dla każdego rekordu. 1. w sprawy powinno być id użytkownika a nie jego nazwa 2. data powinna być jako date Wtedy wszystko pobierasz jednym zapytaniem, grupując po 2 kolumnach:
sprawdziłem u siebie zapytanie zwraca liczbę spraw dla użytkownika i datę w php bardzo łatwo wyświetlisz to w takiej tabelce jaką chcesz uzyskać zapytanie zwróciło mi taki wynik:
Ten post edytował tehaha 18.06.2011, 16:52:23 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 30 Dołączył: 9.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie problem jest w tym, że data jest używana również w innych częściach aplikacji, gdzie znacznie wygodniej jest operować na INT niż na DATE.
Id też wolę nie wstawiać, bo jeśli skasujesz użytkownika, to nie dowiesz się jaki username odpowiadał jego id. Mimo wszystko dzięki za poświęcony czas ![]() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
no to dołóż drugą kolumnę z datą, w php łatwo napiszesz skrypt którzy stworzy date dla już obecnych rekordów i wtedy będzie po kłopocie, bo tak to przy dużej ilości dat i użytkowników będzie masakra
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 30 Dołączył: 9.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 08:03 |