我有一个像这个例子的MYSQL表:
[ID]--[Date]--[UserID]--[Username]--[String]
1 12-10-06 02:35:01 25 Jack string1
2 12-10-06 02:38:01 25 Jack string2
3 12-10-06 02:40:01 25 Jack END
4 12-10-06 02:42:01 36 Jill string1
5 12-10-06 02:45:01 36 Jill string2
6 12-10-06 02:48:01 36 Jill END
7 12-10-06 02:50:01 25 Jack string1
8 12-10-06 02:52:01 25 Jack string2
9 12-10-06 02:55:01 25 Jack END
我正在使用此MYSQL查询对它们进行分组:
SELECT m1.Date, m1.Username, m1.UserID
FROM Username m1 LEFT JOIN Username m2
ON (m1.UserID = m2.UserID AND m1.ID < m2.ID)
WHERE m2.ID IS NULL
ORDER BY Date DESC
它有效但这个查询的问题是它只给出了每个用户的最后一个条目作为输出:
6 12-10-06 02:48:01 36 Jill
9 12-10-06 02:55:01 25 Jack
我希望将所有会话作为输出,例如:
12-10-06 02:35:01 - 12-10-06 02:40:01 25 Jack
12-10-06 02:42:01 - 12-10-06 02:48:01 25 Jill
12-10-06 02:50:01 - 12-10-06 02:55:01 25 Jack
如何使用PHP和MYSQL完成此操作?
答案 0 :(得分:1)
好吧,我怀疑你是否想要查询整个数据库的会话,所以对于你想要的块,我想我只是抓取结束,然后为每一个请求一个不同。
做这样的事情
select UserID, Date, Username from Username order by Date desc limit 10
然后对于每个条目你都可以做
从用户的最后一个会话结束时获取:
select max(Date) from Username where UserID = $userId and Date < '$date' and String = 'cikis'
获取这两个日期之间的最短日期:
select min(Date) from Username where Date > '$lastSessionEndDate' and Date < '$date'
它不应该过多地破坏数据库,只需构建适当的索引并将查询限制为它真正有用的内容,而不是仅仅无缘无故地呈现所有会话的完整报告。