|
| 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
| |
|
|