![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 12.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam pewien problem odnośnie zapytania do bazy. Chciałbym wyciągnąć wszystkich użytkowników którzy byli online w ciągu 5 ostatnich minut. Więc tak: W bazie danych mam pole ostatnioOnline gdzie dane zapisywane są w formacie date('Y-m-d H:i:s'); Aby obliczyć ostatnie 5 minut robię to w taki sposób: Kod <?php $ostatnioOnline=strtotime('2011-2-23 11:40:17'); $teraz=time(); $roznicawminutach = round(abs($teraz - $ostatnioOnline) / 60); if($roznicawminutach >= 0 AND $roznicawminutach <= 5) { echo 'online'; } else { echo 'offline'; } ?> Chciałbym to jakoś teraz wrzucić do zapytania, tak aby wyciągało mi wszystkich którzy byli ostatnio online w ciągu 5 minut Czy da się takie coś zrobić? Czy muszę jakoś przebudować bazę? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 22.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witaj!
Mam nadzieje że to Ci pomoże:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 12.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Raczej takie rozwiązanie mi nie pomoże, ponieważ chcę to zrobić z wykorzystaniem Mysql. W bazie przetrzymuję wszystkie dane, a w wyszukiwarce chce aby była możliwośc wyszukiwania użytkowników tych którzy byli zalogowani 5 minut wcześniej. Czyli użytkowników online.
Pole ostatnioOnline, jest aktualizowane co 5 minut jest sprawdzane i w przypadku gdy użytkownik wykonuje jakąś czynność na stronie, ten czas jest akutalizowany na czas teraźniejszy. A ja szukam rozwiązania którym prosto z bazy danych w jednym zapytaniu mógłbym te dane wyciągnać przeglądam manuala i widzę : Kod mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55'); -> 128885 Kod mysql> SELECT TO_SECONDS('2009-11-29 13:43:32'); -> 63426721412 Ale niestety u mnie to nie działa... więc pewnie robię coś nie tak. U mnie pole ostatnioOnline to VARCHAR i chyba tutaj też jest problem... Ten post edytował świeżak 23.02.2011, 12:29:13 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 654 Pomógł: 121 Dołączył: 27.10.2007 Skąd: Poznań, Łódź Ostrzeżenie: (0%) ![]() ![]() |
Skoro chcesz to zrobić w mysql to poczytaj o funkcji DATE_ADD. Aby uzyskać oczekiwany efekt powinieneś w klauzuli WHERE umieścić coś w stylu:
Pozdrawiam -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 12.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Skoro chcesz to zrobić w mysql to poczytaj o funkcji DATE_ADD. Aby uzyskać oczekiwany efekt powinieneś w klauzuli WHERE umieścić coś w stylu:
Pozdrawiam Dzięki , zabieram się do pracy. No i się udało zapytanie wygląda w taki sposób: Kod WHERE DATE_ADD(ostatnioOnline, INTERVAL 5 MINUTE) >= Now() Bardzo dziękuję za pomoc ![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 107 Pomógł: 30 Dołączył: 19.02.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A może (moim zdaniem) "bardziej naturalny" zapis:
SELECT * FROM ... WHERE ostatnioOnline > date_sub(now(), INTERVAL 5 MINUTE) 1. Od teraz odejmujesz 5 minut - próg czasowy. 2. Szukasz rekordów gdzie ostatnioOnline jest "po" tym progu. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 12:28 |