Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL][MySQL]porownywanie dat
viamarimar
post
Post #1





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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


--------------------
Go to the top of the page
+Quote Post
viamarimar
post
Post #3





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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;



--------------------
Go to the top of the page
+Quote Post
viamarimar
post
Post #5





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Podstawiłeś prawidłową nazwę tabeli?

Pomysł Ci podałem w powyższych odpowiedziach.


--------------------
Go to the top of the page
+Quote Post
viamarimar
post
Post #7





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


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;
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A jak wygląda zapytanie?

Ten post edytował trueblue 15.02.2015, 20:03:57


--------------------
Go to the top of the page
+Quote Post
viamarimar
post
Post #9





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


  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
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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?


--------------------
Go to the top of the page
+Quote Post
viamarimar
post
Post #11





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


liczyc na biezaco czyli?

chodzi ci o update non stop od daty biezacej?!

wystarczy ze to pod zapytanie dam w zmienna?

Ten post edytował viamarimar 15.02.2015, 20:36:05
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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.


--------------------
Go to the top of the page
+Quote Post
viamarimar
post
Post #13





Grupa: Zarejestrowani
Postów: 303
Pomógł: 1
Dołączył: 24.09.2011

Ostrzeżenie: (10%)
X----


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?

Ten post edytował viamarimar 15.02.2015, 21:03:30
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:42