簡體   English   中英

確定 Mysql 中的用戶會話

[英]Determine user sessions in Mysql

如何確定這些虛構用戶的會話時間? 例如,對於用戶 1,我假設他不在 08:24:08 和 15:08:20 之間,所以我不添加該時間間隔,而是添加其他時間。

因此,我尋找一種方法來根據此表將中間時間相加(以秒或分鍾為單位)。 有任何想法嗎。

drop table sessions;
CREATE TABLE IF NOT EXISTS sessions (    
    id_user int(11),
    start_date datetime
);

insert into sessions values (1,'2020-02-21 08:24:07');
insert into sessions values (1,'2020-02-21 08:24:08');--> 1 seg (08:24:08 - 08:24:07)
insert into sessions values (1,'2020-02-21 15:08:20');
insert into sessions values (1,'2020-02-21 15:08:21');--> 1 seg (15:08:21 - 15:08:20)
insert into sessions values (1,'2020-02-21 15:08:22');--> 1 seg 
insert into sessions values (2,'2020-02-20 15:08:22');
insert into sessions values (2,'2020-02-20 15:15:22');--> 7 min (15:15:22 - 15:08:22)
insert into sessions values (3,'2020-02-20 15:08:22');
insert into sessions values (3,'2020-02-20 15:15:22');--> 7 min
insert into sessions values (3,'2020-02-20 15:20:22');--> 5 min

這向您展示了如何在 mysql 5.x 及更高版本中實現這一目標

請閱讀最后的文本以獲取更多信息

CREATE TABLE IF NOT EXISTS `sessions` ( id_user int, `start_date` datetime ); insert into `sessions` values (1,'2020-02-21 08:24:07'); insert into `sessions` values (1,'2020-02-21 08:24:08'); insert into `sessions` values (1,'2020-02-21 15:08:20'); insert into `sessions` values (1,'2020-02-21 15:08:21'); insert into `sessions` values (1,'2020-02-21 15:08:22'); insert into `sessions` values (2,'2020-02-20 15:08:22'); insert into `sessions` values (2,'2020-02-20 15:15:22'); insert into `sessions` values (3,'2020-02-20 15:08:22'); insert into `sessions` values (3,'2020-02-20 15:15:22'); insert into `sessions` values (3,'2020-02-20 15:20:22');
\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n
SELECT IF(@iduser = id_user,TIME_FORMAT(TIMEDIFF(`start_date`,@date), '%H:%i:%S'), NULL) Datediff ,@iduser := id_user iduser , @date := `start_date` `start_date` FROM (SELECT * FROM sessions ORDER by id_user ASC, start_date ASC) t ,(SELECT @iduser := 0) a,(SELECT @date := 0) b;
\n日期差異 | 用戶 | 開始日期         \n :------- |  -----: |  :------------------\n|  1 |  2020-02-21 08:24:07\n 00:00:01 |  1 |  2020-02-21 08:24:08\n 06:44:12 |  1 |  2020-02-21 15:08:20\n 00:00:01 |  1 |  2020-02-21 15:08:21\n 00:00:01 |  1 |  2020-02-21 15:08:22\n|  2 |  2020-02-20 15:08:22\n 00:07:00 |  2 |  2020-02-20 15:15:22\n|  3 |  2020-02-20 15:08:22\n 00:07:00 |  3 |  2020-02-20 15:15:22\n 00:05:00 |  3 |  2020-02-20 15:20:22\n

db<> 在這里小提琴

它使用TIMEDIFF來獲取行之間的差異。

並且使用TIME_FORMAT來擺脫毫秒。

新的Datediff列位於開頭並且必須保留在那里,以便算法可以工作 如果要在 mysql 中對其重新排序,則需要一個新的外部 SELECT 查詢。

這個算法的最后一個問題是,它很簡單地使 time1 - time2,它不關心新的一天是否開始,它仍然會為每個 id_user 做這個。 可以使用更復雜的 ORDER BY 子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM