![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam tabele z takimi kolumnami:
time (timestamp unixowy (123456789)) host_name (nazwa hosta) srv_dsc (opis servisu) srv_output (output servisu) Mam kilka hostów i kilka serwisów. każdy wpis do bazy danych jest unikalny (timestamb, host_name, srv_dsc). Próbuję wymyślić takie zapytanie żeby dla danego hosta pobrać tylko najnowsze wpisy dotyczące każdego z serwisów, czyli jeśli mam 5 serwisów to jako rezultat dostaję 5 lini itp. Próbowałem tego ale jakoś wątpie że to zadziała.
Jakieś sugestie? Dzięki za przeczytanie |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Coś z ten desen
Wyświetlasz nazwy hostów i do kazdego po 5 najnowszych opisów Ten post edytował kefirek 13.01.2009, 12:46:52 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tego mi właśnie trzeba było!
A jednak nie
time: 1232090415 czyli (Fri, 16 Jan 2009 07:20:15 UTC) host_name: host srv_dsc: opis serwisu srv_out: wynik serwisu MAX( time ): 1232093703 czyli (Fri, 16 Jan 2009 08:15:03 UTC) Chciałem uzyskać najnowsze wyniki z tabeli dla danego hosta a tu jakieśtam inne wyszły Jakiś pomysł? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 8 Dołączył: 5.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale te zapytania nei wybierająmi najnowszych wpisów? Dlaczego?
Mam jakieś 100 nowych wpisów do bazy co minute. I mam nowsze wpisy. Sprawdzam MAX(time) i porównuje z tym co uzyskałem i mam różnice. A powinno wyświetlić najnowsze wpisy! Dostaje 1232090415 (Fri, 16 Jan 2009 07:20:15 UTC) a w bazie jest juz 1232099974 (Fri, 16 Jan 2009 09:59:34 UTC) (IMG:http://matisq.mvc.pl/file.png) Ten post edytował matisq 16.01.2009, 11:51:20 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 8 Dołączył: 5.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
sotruj po timet, a nie po service_description!!!
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
ale chce wyniki miec zwrócone tak zebym miał je posortowane po nazwie serwisu! A pozatym jak zmieniam zapoytanie i tak dostaje te same wyniki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Znaczy z 7:20
Ten post edytował matisq 16.01.2009, 13:13:14 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ale chce wyniki miec zwrócone tak zebym miał je posortowane po nazwie serwisu! No to albo sortujesz po nazwie serwisu (wtedy nie będą posortowane po czasie), albo sortujesz po czasie (wtedy najnowsze będą na początku/końcu). Jeśli chcesz wybrać po 5 najnowszych wpisów z każdego serwisu, to musisz zastosować pętlę w PHP (napisał Ci o tym kefirek w drugim poście). W innym wypadku możesz wybrać najnowsze z tabeli, ale z różnych serwisów, lub najnowsze z danego serwisu, ale nie koniecznie będą to najnowsze w całej tabeli. Ten post edytował sowiq 16.01.2009, 15:26:07 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze raz.
Mam taką ogromniastą tabele z milionem wpisów (100 wpisów/sek). Chcę stworzyć zapytanie które dla każdego hosta (w tabeli jest ich 70) w wynikuda mi najnowszy (najwyzszy numer timet) pojedynczy wpis dotyczacy każdego z serwisów (a jest ich powiedzmy 5). |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Tu masz dobrze napisane. Musisz zmienić tylko jedną rzecz (a dokładnie usunąć cały warunek WHERE). Jakby chciało Ci się popróbować samemu, to już dawno byś do tego doszedł sam. [edit] Ew. możesz spróbować
Ten post edytował sowiq 16.01.2009, 15:52:43 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chciało mi się i ciagle próbuje ale dalej nie działa!
Takie zapytanie nie zwraca mi nic sensownego. Po co mi srv_dsc skoro nie wiem kiedy to miało miejsce?
A zapytanie
zwraca mi to co chcę ale nie ostatnie wystąpienie tylko jakieś inne. Jak dodać warunek na otrzymanie ostatniego wpisu z bazy ? Już działa. Rozbiłem to na kilka tabel i zrobiłem kombinację zapytania w MySQL i PHP. Ale mam kolejny problem. Otóż wywołuję takie oto zapytanie.
I czas odpowiedzi to ponad 20 sekund. Baza ma 1,2 GB i ponad 500000 rekordów. Indeksowana jest po 'id' który jest autoinkrementowany. Czy istnieje jakiś sposób na zmniejszenie tego czasu? Takich zapytań chcę zrobić koło 300! Nie muszę chyba dodawać że: Handler_read_rnd=16 k Handler_read_rnd_next=39 M To już chyba norma. Jakieś pomysły? |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 2 Dołączył: 28.01.2009 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Pomyśl o cache w zapytaniach i nie pobieraj " * " - wszystkiego z tabeli.
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 22 Pomógł: 0 Dołączył: 2.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
Spróbowałem wywalić * ale to nic nie zmienia.
Tak sobie myśle że może jest inny problem. Mam tych rekordów 500000 w sumie ale po wywołaniu zapytania:
Zwraca mi 4000 linii. I dopiero z tych 4000 linii ma znaleść najnowszy wpis (najwyższe id). Nie ma jakiegoś lepszego sposobu na to? Co to znaczy cache zapytań? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:29 |