我必须为我的应用程序做一些统计,所以我需要一个性能尽可能好的算法。我有几个问题。
我在mysql数据库中有这样的数据结构:
user_id group_id date
1 5 2012-11-20
1 2 2012-11-01
1 4 2012-11-01
1 3 2012-10-15
1 9 2013-01-18
...
所以我需要在特定日期找到某个用户的组。例如,用户 1 在日期 2012-11-15(2012 年 11 月 15 日)的组应返回最近的组,即 2012-11-01 日期的 2 和 4(同时有多个组)(最接近和更小的日期)。
通常,我可以执行 Select where date <= selected date order by date desc 等...但这不是重点,因为如果我有 1000 个用户,则需要 1000 个请求才能获得所有结果。
所以这里有一些问题:
- 我已经使用php的方法循环数组以避免大量的mysql请求,但是仍然不好,因为数组大小可能是10000+。使用 foreach(或 for?)非常昂贵。所以我的问题是,如果给定一个按日期(desc 或 asc)排序的数组,找到包含小于(或大于)给定日期的日期的元素的最近索引的最快方法是什么?除了使用 for 或 foreach 循环来遍历每个元素。
- 如果第一个问题没有解决方案,那么对于这类问题你会建议什么样的数据结构。
注意:日期为mysql格式,存储在数组中时不转换为时间戳
编辑:这是一个 sql fiddle http://sqlfiddle.com/#!2/dc28d/1 对于dos_id = 6, t="2012-11-01"它应该只返回2 和 5在日期“2010-12- 10 13:16:58"