Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL][MySQL]porownywanie dat
Forum PHP.pl > Forum > Przedszkole
viamarimar
Witam mam pewna zagwostke

mam w bazie w jednej tabeli pola
dataLogowania (datatime)
dataWylogowania (datatime)

Chialbym zliczyc czas zalogowanego uzytkownika wpisujac go w pole

CalkowityCzas

1. Czy jest to mozliwe tylko z poziomu sql?
2. Moge uzyc tez php ale te daty trzeba tez jakos odczytac i porownac, czy istnieje mozliwosc operacji na dacie w ten sposob?
trueblue
Możliwe jest zalogowanie przez czas dłuższy niż 24 godziny? Jeśli nie, to: http://dev.mysql.com/doc/refman/5.5/en/dat...nction_timediff
viamarimar
Juz wyczytalem o tym diff tylko o datediff, no ale mniejsza tak czy saik rzuca bledami, ktore rozumiem ale nie wiem czemu sa:

  1. SELECT TIMEDIFF(`dataLogowanie`,`dataWylogowanie`);


#1054 - Unknown column 'dataLogowanie' in 'field list'

  1. SELECT DATEDIFF(day,'2008-06-05','2008-08-05') AS DiffDate


#1582 - Incorrect parameter count in the call to native function 'DATEDIFF'

  1. SELECT TIMESTAMPDIFF(MINUTE,dataLogowania,dataWylogowania);


#1054 - Unknown column 'dataLogowania' in 'field list'

  1. SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');


dziala? chodz gdy wstawaiam dataLogowania/dataWylogowania jak wyzej to sie buntuje

i teraz pytanie dlaczego?
trueblue
Mój błąd, bo funkcja policzy również jeśli różnica jest większa niż 24 godziny.

A co do Twojego problemu.

  1. SELECT TIMEDIFF(`dataLogowanie`,`dataWylogowanie`) FROM tabela;
  2.  
  3. SELECT DATEDIFF('2008-06-05','2008-08-05') AS DiffDate;
  4.  
  5. SELECT TIMESTAMPDIFF(MINUTE,`dataLogowania`,`dataWylogowania`) FROM tabela;

viamarimar
dalej to samo

#1054 - Unknown column 'dataLogowania' in 'field list'

czy problem nie jest w tym ze u mnie pola sa w datatime?

a funkcja TIMESTAMPDIFF przeksztalca na zasadzie SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');

czyli z pierwszy arg data drugi datatime, pomysly?

cos innego? bo mimo wszystko czas zalogowania tez by bylo fajnie trzymac
trueblue
Podstawiłeś prawidłową nazwę tabeli?

Pomysł Ci podałem w powyższych odpowiedziach.
viamarimar
no tak , blad tez napisalem, gada cos o polu Logowanie czyli tak jakby o jego typie ?

dane mam na tej zasadzie:
  1. CREATE TABLE IF NOT EXISTS `wpl_dane` (
  2. `dane_id` int(11) NOT NULL,
  3. ...
  4. `dataLogowanie` datetime NOT NULL,
  5. `dataWylogowanie` datetime NOT NULL
  6. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
trueblue
A jak wygląda zapytanie?
viamarimar
  1. mysql_query("UPDATE ".$prefix."users,".$prefix."dane SET ".$prefix."dane.czasSesji = (SELECT TIMEDIFF(".$prefix."dane.dataWylogowanie,".$prefix."dane.dataLogowanie) FROM ".$prefix."dane) WHERE ".$prefix."users.users_login='$user'") or die(mysql_error());


wynik juz zwraca z poziomu sql

ale teraz cos takiego, nadal kwestia zapytania ale? nie widzialem tego typu bledu jescze chyba

  1. You can't specify target table 'wpl_users' for update in FROM clause
trueblue
Nie możesz update'ować tabeli, której jednocześnie używasz w podzapytaniu.
Po drugie, jeśli nawet, to podzapytanie wcale nie zwraca czasu sesji dla użytkownika, który jest w aktualizowanym rekordzie.
Po trzecie: dane.czasSesji=TIMEDIFF(data1,data2)
I po czwarte, po co, skoro możesz liczyć na bieżąco?
viamarimar
liczyc na biezaco czyli?

chodzi ci o update non stop od daty biezacej?!

wystarczy ze to pod zapytanie dam w zmienna?
trueblue
Chodzi mi o to, że jeśli masz obydwa czas, to zawsze możesz obliczyć z nich czas zalogowania, a tak będziesz zapisywał datę wylogowania oraz i tak liczył czas zalogowania i również zapisywał do tabeli.
viamarimar
w sensie nadmierna ilosc danych w bazie? to mi akurat nie wadzi

forum to nie chat wiec wiecej nie bede pytal

rozbilem to tak jakby na dwa

  1. $czas = "(SELECT TIMEDIFF(".$prefix."dane.dataWylogowanie,".$prefix."dane.dataLogowanie) FROM ".$prefix."dane)";
  2. mysql_query("UPDATE ".$prefix."users,".$prefix."dane SET ".$prefix."dane.czasSesji = '$czas' WHERE ".$prefix."users.users_login='$user'") or die(mysql_error());
  3.  


ale nie dziala wskazesz mi co robie zle? tak zeby to ruszylo?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.