/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
SQL, tidsforskel, hvordan skrives det? (ph~
Fra : Jakob Munck


Dato : 30-11-05 20:27

Jeg skal lave en liste over de personer, som har logget sig ind i en portal
i løbet af dagen. Tidspunktet for den sidste login ligger i tabellen
"tbmembers" i feltet "last_login" (datetime-felt med år-md-dag
time:min:sek). Dagen i dag (år-måned-dag) kan jeg få ved at skrive
"date("Y-m-d", time())".

Første problem er altså at der er for megen information i tabellens
datetime-format. Jeg skal jo ikke bruge timer, minutter og sekunder til
noget. Og så kan desuden ikke overskue, hvordan jeg skriver en SQL-sætning
der fortæller at der skal udvælges de records i tabellen, hvor datoen for
sidste login er identisk med i dag.

Mit forslag:

<?
.....
dato = date("Y-m-d", time());
$sql = mysql_query("SELECT * FROM tbmembers WHERE last_login = dato");
.....
?>

Men det virker ikke, da tidspunkterne har forskelligt format.

Hvad gør jeg? Hvem kan hjælpe?

v.h.
Jakob



 
 
Martin (01-12-2005)
Kommentar
Fra : Martin


Dato : 01-12-05 17:08

Jakob Munck wrote:
> Mit forslag:
>
> <?
> ....
> dato = date("Y-m-d", time());
> $sql = mysql_query("SELECT * FROM tbmembers WHERE last_login = dato");

Mit forslag:

$sql = mysql_query("
   SELECT *
   FROM tbmembers
   WHERE
   last_login = NOW()
   ") OR DIE (mysql_error());

Men tag en kig på <www.mysql.com/doc> og søg efter date

> v.h.
> Jakob
>
>

--
Venlig hilsen
Martin


Jakob Munck (02-12-2005)
Kommentar
Fra : Jakob Munck


Dato : 02-12-05 01:41

>
> $sql = mysql_query("
> SELECT *
> FROM tbmembers
> WHERE
> last_login = NOW()
> ") OR DIE (mysql_error());
>

Den duer ikke, da både "last_login" og NOW() indeholder minutter og
sekunder, hvilket gør at man spørger om der er nogle som har logget sig ind
i netop det aktuelle sekund. Og det var ikke meningen, da det kun drejer sig
om hvem der har logget sig ind i dag.

Jeg har tidligere (i et andet sprog), anvendt denne sql-ætning til at løse
problemer:

<?
$sql = mysql_query("SELECT * FROM tbmembers WHERE DateDiff('d',
last_login_time, Now) = 0");
?>

Men den duer ikke i php og jeg kan ikke se, hvad man så skal gøre.

v.h.
Jakob



Peter Brodersen (02-12-2005)
Kommentar
Fra : Peter Brodersen


Dato : 02-12-05 03:05

On Thu, 01 Dec 2005 17:08:08 +0100, Martin <news@natten-i.dk> wrote:

>   last_login = NOW()

CURRENT_DATE() er nok mere oplagt at bruge end NOW()

(hvis man vil have mysql-querycache-optimering, så kan man "manuelt"
indsætte datoen statisk - altså:

> last_login = '".date("Y-m-d")."'

--
- Peter Brodersen

Jakob Munck (02-12-2005)
Kommentar
Fra : Jakob Munck


Dato : 02-12-05 09:00

Jeg har ikke kunnet løse problemet v.hj.a. det eksisterende datetime felt,
som har formatet '0000-00-00 00:00:00'. Derfor har jeg i stedet lavet et nyt
felt i tabellen ("last_login_date") med tiden angiver uden timer, minutter
og sekunder. Det er lavet sådan:

$dags_dato = date("Y-m-d", time());

Og udvælgelsen af de records, som har dagen i dag som tidsstempel for
hvornår de sidst er logget ind, ser sådan ud:

$sql = mysql_query("SELECT * FROM tbmembers WHERE last_login_date =
CURRENT_DATE()") OR DIE (mysql_error());


Det er nok ikke den mest elegante løsning, men den virker. Hvis nogen har en
smartere måde at gøre det på, hvor man kan nøjes med at have ét tidsfelt i
databasen for sidste login, og hvor dette tidsfelt kan være datetime (jeg
skal nemlig bruge timer, minutter og sekunder andre steder), så vil jeg godt
se den.

Mange tak for hjælpen.

v.h.
Jakob



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste