gpt4 book ai didi

php - SQL返回尚未注销的事件用户

转载 作者:可可西里 更新时间:2023-11-01 08:26:56 27 4
gpt4 key购买 nike

我整天都在尝试这个,但没有成功。我的系统中有 3 个表,如下所示:

    ***User***
UserID (PK)
Username

***Usertransaction***
UsertransactionID (PK) (auto_increment)
UserID (FK)
TransactionID (FK)
TimeStamp

***Transaction***
TransactionID (PK)
TransactioName

Tables and Test Data - SQLFiddle

当用户登录系统时,它会登录到用户事务表中。创建了一条包含用户的用户 ID、事务 ID 和时间戳的记录。

这是登录:$Query="insert into usertransaction('$UserID',1)"输入记录时,DBMS 会自动生成时间戳。当用户注销但使用不同的事务 ID 时,系统会执行相同的操作。

这是注销:$Query="insert into usertransaction('$UserID',2)"

所以本质上登录和注销记录在同一个数据库中。一个用户可以有很多登录和注销但是我想要最新的一次。我一直在与 SQL 查询作斗争,以返回已登录系统但尚未注销的所有用户的计数。我知道现在是圣诞节,但请帮忙。

到目前为止我有这个:

select A.useriD,A.transactionID,A.Timestamp
from usertransaction
INNER JOIN
(
select userID, max(Timestamp) AS Latest_Login
from usertransaction
WHERE usertransaction=1
) AS B
ON A.UserID=B.UserID,A.transactionID=B.transactionID,A.Timestamp=B.Latest_Login
WHERE usertransaction=1


select A.useriD,A.transactionID,A.Timestamp
from usertransaction
INNER JOIN
(
select userID, max(Timestamp) AS Latest_Logout
from usertransaction
WHERE usertransaction=2
) AS B
ON A.UserID=B.UserID,A.transactionID=B.transactionID,A.Timestamp=B.Latest_Logout
WHERE usertransaction=2

我分别获取登录结果和注销结果。如何比较这两个语句并检查用户是否仍处于登录状态?

最佳答案

@Kickstart 是正确的,尽管查询需要修改:

SELECT ut1.UserID
ut1.transactionID,
ut1.Timestamp
FROM Usertransaction ut1
LEFT OUTER JOIN Usertransaction ut2
ON ut1.UserID = ut2.UserID
AND ut2.TransactionID = 2
AND ut1.TimeStamp < ut2.Timestamp
WHERE ut1.TransactionID = 1
AND ut2.UsertransactionID IS NULL

关于php - SQL返回尚未注销的事件用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34435670/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com