Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][PHP]Update online - konstrukcja
fr33d0m
post
Post #1





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

Ostrzeżenie: (0%)
-----


Posiadam na praktycznie wszystkich podstronach sporego portalu, który tworzę od pół roku taki oto skrypt:

  1. if($ZAPISUJ===1){
  2. mysql_query("UPDATE `online` SET `gdzie` = '1', `czas` = '5' WHERE `sesions_id` = '$id'");
  3. }

Powyższy skrypt zapisuje na jakiej podstronie znajduje się user oraz ustawia kolumnę z czasem sesji na 5 minut.
Mam też plik, który wykonuje cron co 5min w takiej postaci:
  1. mysql_query("UPDATE `online` SET `czas` = (`czas` - '5') WHERE `czas` > 4");

Ma on za zadanie wyeliminowanie nie aktywnych użytkowników, którzy byli zalogowani.

Odnośnie skryptu crona nie mam zastrzeżeń. Natomiast skrypt, który ustawia 5min "życia" sesji przy zaledwie 3rekordach w bazie o unikalnym ID każdy, wydłuża czas generowania strony , o 0.04000 sekundy! na pierwszy rzut oka to malutko, ale przewidywuje w tabeli `online` trzymać około 10k rekordów, więc czas ten mocno się wydłuży...
Mam założone indexy na kolumny, ale problem chyba leży w logice mojego skryptu wywalającego sesje, aby nadać danemu userowi status "offline", gdy ten nie korzysta z portalu przez 5min. Jeśli ktoś ma inną idee, szybszą to będę wdzięczny za wskazówki...

Ten post edytował fr33d0m 2.07.2012, 18:24:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
fr33d0m
post
Post #2





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

Ostrzeżenie: (0%)
-----


To głupie, ale specjalnie dla Ciebie zmieniłem kolumnę o nazwie `gdzie` na char'a, aby przetestować Twoje wątpliwe rozwiązanie. Efekt taki sam.
`last_seen` u Ciebie to STRING - ja miałem INT'a w kolumnie `gdzie`, później, po stronie PHP obrabiałem sobie numerki pod konkretne nazwy typu 'Strona Główna' itp. To jest logiczne, bardziej niż Twoje słabe wywyższanie się od pierwszej wypowiedzi. (IMG:style_emoticons/default/wink.gif)

EDIT: wszystkie pola mam w INT'cie - widać to w pierwszym poście z opisem problemu.

Ten post edytował fr33d0m 2.07.2012, 19:53:42
Go to the top of the page
+Quote Post
Rysh
post
Post #3





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


Poparz kolego:
  1. <?php
  2. $check = mysql_query("SELECT * FROM user WHERE session_life > NOW() AND user_id = "'. $_SESSION['user_id'] .'" LIMIT 1") or die ("Błąd: ". mysql_error());
  3.  
  4. if(mysql_num_rows($check) == 0) {
  5. //sesja wygasła lub coś tam coś, przekierowanie do logowania
  6. header('Location login.php');
  7. }
  8.  
  9. //sesja istnieje dalszy ciąg strony
  10. //ze zmiennej $check możesz wyciągnąć sobie elegancko dane o użytkowniku
  11.  
  12.  
  13. //na zakończenie strony update, czyli co tylko chcesz zmienić
  14. mysql_query("UPDATE user SET session_life = NOW() + 360, last_seen = 'Jakaś strona' WHERE user_id = "'. $_SESSION['user_id'] .'");
  15. ?>

I jestem pewien, że rozwiązanie takie będzie o wiele wydajniejsze.
Go to the top of the page
+Quote Post
fr33d0m
post
Post #4





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

Ostrzeżenie: (0%)
-----


Tak, zgadzam się. Tylko, że UPDATE Twój czy mój, wykonuje się tak samo mozolnie... i w tym tkwi mój problem.


Edit:
W zasadzie 1/2 problemu rozwiązana - zastąpię crona, czasem dodatnim w DB i będę sprawdzał.
2/2 problemu są jak widać moim widzi-misie nie realnym do skorygowania.

PKT. dla Ciebie za pomoc.

Poza tematem, dobrze będzie wykorzystać crona, aby odjąć ważność ogłoszenia?
Zapisuje ważność ogłoszenie w postaci liczby i raz dziennie, chwilę przed północą odejmuję poprzez crona od ważności -1
  1. mysql_query("UPDATE `ogloszenia` SET `waznosc` = (`waznosc` - '1') WHERE `waznosc` > 0");

Tu cron się nadaje?


Ten post edytował fr33d0m 2.07.2012, 21:14:05
Go to the top of the page
+Quote Post

Posty w temacie
- fr33d0m   [SQL][PHP]Update online - konstrukcja   2.07.2012, 18:23:29
- - Rysh   Twoje rozwiązanie jest do bani. Więc nie dziw się,...   2.07.2012, 18:31:01
- - fr33d0m   Tak, a Twój post to czysty i perfidny spam. Gdyby ...   2.07.2012, 18:34:55
- - Rysh   To nawet nie jest dobre rozwiązanie, wręcz powiedz...   2.07.2012, 18:40:57
- - fr33d0m   to powiedz mi jak wywalić zapisaną sesje w bazie (...   2.07.2012, 18:48:12
- - Rysh   Jak to się nie da? A w czym problem zapisać w bazi...   2.07.2012, 18:53:13
- - fr33d0m   No tak... ale to załatwi tylko 1/2 problemu. Chcę ...   2.07.2012, 18:57:29
- - Rysh   Update i tak będziesz musiał robić, ponieważ będzi...   2.07.2012, 19:02:35
- - fr33d0m   hm... czy aby przypadkiem nie wychodzi na to samo?...   2.07.2012, 19:09:05
|- - Rysh   Cytat(fr33d0m @ 2.07.2012, 20:09:05 )...   2.07.2012, 19:40:12
- - fr33d0m   To głupie, ale specjalnie dla Ciebie zmieniłem kol...   2.07.2012, 19:49:25
|- - Rysh   Poparz kolego: [PHP] pobierz, plaintext <?php$c...   2.07.2012, 20:26:12
|- - fr33d0m   Tak, zgadzam się. Tylko, że UPDATE Twój czy mój, w...   2.07.2012, 20:57:25
- - klocu   Ja mimo wszystko popieram rozwiązanie Rysh'a. ...   2.07.2012, 20:08:11
- - fr33d0m   Panowie, nie kumam was. Rozwiązanie Rysh'a jes...   2.07.2012, 20:19:15
- - peter13135   Może problem załatwi założenie indeksów na pola kt...   2.07.2012, 21:22:34
- - Rysh   Widzę że na siłę chcesz używać CRON'a. Niepotr...   2.07.2012, 21:24:18
- - fr33d0m   @peter12125, też myślałem, aby używać crona wyłącz...   2.07.2012, 21:47:40
- - PtasiorZz   Ja osobiście zrobiłbym to tak: - Nie zapisywałbym...   3.07.2012, 05:49:17
- - fr33d0m   Hmm... Zdecydowanie bardziej ufam ustawieniu czasu...   3.07.2012, 19:21:05
- - PtasiorZz   Odświeżenie sesji a zapisanie ostatniej aktywności...   3.07.2012, 22:39:14


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 00:04