webForumDet fria alternativet

online med två tabeller

Databaser & SQLur Databashanterare & SQL

4 svar · 171 visningar · startad av mozilla

mozillaMedlem sedan juli 20011 084 inlägg
#1

Jag behöver lite hjälp, jag har en mySQL databas som är uppbyggd av två tabeller, en connect och en disconnect tabell. Och jag vill hämta ut alla som är online. Dvs. de som är registrerade i connect men inte finns med i disconnect med ett datum/klockslag som är högre än vad de har i connect. I båda tabellerna finns userid och eventtime. Upplägget är kanske inte det bästa men tyvärr inget jag kan ändra på.

Förtydligande av databas:

  • userid

  • eventtime

  • userid

  • eventtime

Nexus86Medlem sedan okt. 20023 030 inlägg
#2
SELECT c.userid FROM connect c, disconnect d WHERE c.userid = d.userid, c.eventtime < d.eventtime

eller

SELECT c.userid FROM connect c, disconnect d WHERE c.userid = d.userid AND c.eventtime < d.eventtime

Hoppas jag. Är inte riktigt säker

mozillaMedlem sedan juli 20011 084 inlägg
#3

det fungerade inte riktigt, eller jag fick ut alla inte bara de som är online. Kan tilläggas att det fungerar så här:

När användaren loggar in skapas en post i connect
INSERT INTO connect (userid,eventtime) VALUES (id,now())

Nu är användaren online och när den loggar ut skapas en ny post i disconnect
INSERT INTO disconnect (userid,eventtime) VALUES (id,Now())

Det betyder alltså att de användare som är online bara har finns med i connect tabellen, inte i disconnect. Men de kan dock ha varit inloggade tidigare så därför måste jag kontrollera så att användaren inte finns med i tabellen disconnect eller att tiden(eventtime) är tidigare än när den loggade in i connect.

aasahMedlem sedan mars 20034 471 inlägg
#4

mozilla skrev:

...När användaren loggar in skapas en post i connect
INSERT INTO connect (userid,eventtime) VALUES (id,now())

Nu är användaren online och när den loggar ut skapas en ny post i disconnect
INSERT INTO disconnect (userid,eventtime) VALUES (id,Now())

Det betyder alltså att de användare som är online bara har finns med i connect tabellen, inte i disconnect. Men de kan dock ha varit inloggade tidigare så därför måste jag kontrollera så att användaren inte finns med i tabellen disconnect eller att tiden(eventtime) är tidigare än när den loggade in i connect.

Nu säger du emot dig själv! :q Om userid 5 loggar in 20030709 kl 10.00, ut 20030709 kl 12.00 och in på nytt 20030723 kl.10.00 så borde enligt dina insertsatser följande finnas (bland mycket annat):

I Connect:
5   20030709 10:00
5   20030723 10:00

I Disconnect:
5   20030709 12:00

Eller finns det en deletesats som plockar bort dig ur connect-tabellen när du loggar ur?

LarsGMedlem sedan dec. 200012 464 inlägg
#5
select c.user from connect c left join disconnect d
on c.userid = d.userid
group by c.userid
having max(c.eventtime) > max(coalesce(d.eventtime,'1900-01-01 00:00:00'))
130 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)