webForumDet fria alternativet

Fråga med subquerys

4 svar · 469 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Tjena
Jag ska plocka ut ett gäng saker från en besökslogg:
- Senaste inloggning (före "nu", alltså näst senaste)
- Antal inloggningar (totalt)
- När första inloggning ägde rum

Dessa saker ska jag presentera för besökaren när denna loggar in.
Såhär har jag gjort:

$sSql =	 "SELECT "
	."logg_datetime, logg_ipaddr, "
	."(SELECT COUNT(logg_id) FROM admin_users_logg WHERE logg_user = " . $_SESSION['user_id'] . ") AS login_antal, "
	[red]."(SELECT logg_datetime FROM admin_users_logg WHERE logg_user = " . $_SESSION['user_id'] . " ORDER BY logg_datetime ASC LIMIT 1) AS first_visit "[/red]
	."FROM admin_users_logg "
	."WHERE logg_user = " . $_SESSION['user_id'] . " "
	."ORDER BY logg_datetime DESC "
	."LIMIT 2";
$result3 = mysql_query($sSql, $the_link) or die("<p>Fel:\n" . mysql_error() . "</p>\n");
while($rs = mysql_fetch_array($result3)){
	$logg_datetime	= $rs['logg_datetime'];
	$logg_ipaddr	= $rs['logg_ipaddr'];
	$logg_antal	= $rs['login_antal'];
	$first_visit	= $rs['first_visit'];
}

Problemet är att den rödfärgade subfrågan, ger "1970-01-01 00:33:26" hur jag än bär mig åt, den verkar alltså inte returnera nått alls.
Vidare så har jag problem att hämta det näst senaste besöket, har sökt omkring här men hittar inget som jag har hjälp av. Måste ha det näst senaste, för hämtar jag den senaste, så visar den ju tiden för den inloggning man precis gjort.
Såhär har jag gjort för att visa detta:

Du loggade senast in [red]<?=gmdate("Y-m-d H:i:s", $logg_datetime + $_SESSION['user_gmt'] * 3600);[/red]?><br />
	Du har totalt loggat in [red]<?=$logg_antal?> gånger sedan <?=gmdate("Y-m-d H:i:s", $first_visit + $_SESSION['user_gmt'] * 3600);[/red]?> .<br /><br />

Det rödmarkerade ska göra så att "rätt" tidszon visas, då aktuell tid GMT0 sparas i databasen.

DBMS är MySQL 5.

Tack på förhand!

MickeA.comMedlem sedan feb. 20034 441 inlägg
#2

Nu dök jag på ett felmeddelande på raderna med gmdate():

Warning: gmdate(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in e:\projekt\batavia\admin\adm_start.php on line 47

Så, man kan alltså inte använda det om man ligger på en windows server?
Finns det nått annat sätt att lösa det på.
Det här system kommer nämligen användas av dels personer i sverige och dels i singapore, så jag behöver på något sätt på till "rätt" tid för resp. tidszon.

Nu kanske det här har blivit med ett PHP problem, så plötsligt kanske tråden ligger i fel forum..?

MickeA.comMedlem sedan feb. 20034 441 inlägg
#3

Nu har jag rättat till det här med gmdate();
Jag sparade tiden som UnixTime i databasen, sen konverterar jag det vid utskrift ist.

Men i SQL-Frågan återstår mina frågor, det här med att plocka ut näst senaste besök för en viss användare...

Tack!

Peter SMedlem sedan dec. 20025 483 inlägg
#4
select <columns>
  from admin_users_logg
 where logg_user = $_SESSION['user_id']
   and logg_datetime
     < (select max(logg_datetime)
          from admin_users_logg
         where logg_user = $_SESSION['user_id'])
order
    by logg_datetime desc
 limit 1
MickeA.comMedlem sedan feb. 20034 441 inlägg
#5

Tack!

255 ms totalt · 3 externa anrop · v20260731065814-full.30151723
129 ms — hämta forumlista (db)
124 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)