使用PHP对MYSQL条目进行分组

时间:2012-10-06 10:32:40

标签: php mysql

我有一个像这个例子的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完成此操作?

1 个答案:

答案 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'

它不应该过多地破坏数据库,只需构建适当的索引并将查询限制为它真正有用的内容,而不是仅仅无缘无故地呈现所有会话的完整报告。