Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.10.2007 Ostrzeżenie: (0%)
|
Z góry przepraszam za mało znaczący tytuł tematu.
Posiadam tabelę w bazie danych w mysql o strukturze: `id` - int, autoincremental `name` - varchar `status` - varchar `start` - datetime `stop` - datetime `opis` - longtext Przechowywane i dopisywane są w niej nazwy wykonanych zadań wraz z datą startu, stopu, oraz statusie zakończenia + w opisie log. Wartości dla `name` są powtarzalne, jest to ok 150 różnych wpisów (chociaż zawsze mogą dojść nowe). `status` możne przyjmować tylko 3 wartości- 'O' (o.k) , 'B' (bad), 'U' (unknown). Problemik polega na wyszukaniu wszystkich zadań, które ostatnio zakończyły się (`stop`) co najmniej 3-krotnym niepowodzeniem (`status` = 'B'), przy czym status 'U' zadania nie jest brany w ogóle pod uwagę. Raport musi zawierać: nazwę zadania ( `name`), ile razy się nie udał , ostatni udany (`id`), ostatni nieudany(`id`) Proste wyszukiwanie poprzez wyciągnięcie wszystkich możliwych nazw i późniejszą iterację (w PHP ) po wszystkich rekordach o danym `name` jest lekko nieefektywne ze względu na ok 1 mln rekordów w tabeli - codziennie pojawia się ok 5000 nowych. Typ silnika i indexy mogę dowolnie zmieniać. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
A nie prościej przez group by...? Trochę zagmatwałeś - np. nie wiem, w jaki sposób mamy rozróżnić na podstawie podanych przez Ciebie danych, ile razy wystąpiło niepowodzenie?
|
|
|
|
Post
#3
|
|
|
Grupa: Nieautoryzowani Postów: 92 Pomógł: 15 Dołączył: 21.10.2006 Ostrzeżenie: (0%)
|
Tu masz rozwiązanie
wysciwetlą Ci sie nazwy i lista statusow jakie mialy pokolei jesli liczba bledow ostatnich wynosi wiecej niz 2 pomijajac status 'U' jesli chcesz wiecej danych to musisz pokombinować. Np. zeby jeszcze podawal ile ostatnich razy pod rzad sie nie udał (pomijajac 'U')
dodatkowe dane jesli to zapytanie nie zwraca duzo wierszy mozesz pobrac dodatkowymi zapytaniami juz dla konkretnych name pobranych powyzszym zapytaniem Ten post edytował heaven 27.05.2009, 11:16:58 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.10.2007 Ostrzeżenie: (0%)
|
Sprawdzę jutro na tabeli i zapodam wynik.
Obecnie algorytm wyszukuje wszystkie unikalne nazwy: SELCET DISTINCT name FROM tabela ORDER BY name; a z uzyskanej listy wybierane są rekordy dla konkretnego zadania SELECT id, status FROM tabela WHERE name='zadanieX' ORDER BY id DESC; w PHP następuje zliczanie rekordów ze `status`=' B' od najnowszego( największe `id`) aż do tego, który ma `status`= 'O' Napiszę szczerze, że nie wiem, w jaki sposób wyciągnąć jednym zapytaniem listę zadań, których ostatni `status`='B'. (nadal muszę uwzględnić to, że `status`='U' w ogóle nie jest brany pod uwagę!!!) Wtedy byłoby znacznie mniej do przeglądania. |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 19:32 |