【发布时间】:2012-06-14 02:56:56
【问题描述】:
我有这个表结构:
编辑更复杂的例子:添加隐藏范围
category| day | a |
--------|------------|-------|
1 | 2012-01-01 | 4 |
1 | 2012-01-02 | 4 |
1 | 2012-01-03 | 4 |
1 | 2012-01-04 | 4 |
1 | 2012-01-05 | 5 |
1 | 2012-01-06 | 5 |
1 | 2012-01-07 | 5 |
1 | 2012-01-08 | 4 |
1 | 2012-01-09 | 4 |
1 | 2012-01-10 | 4 |
1 | 2012-01-11 | 5 |
1 | 2012-01-12 | 5 |
1 | 2012-01-16 | 5 |
1 | 2012-01-17 | 5 |
1 | 2012-01-18 | 5 |
1 | 2012-01-19 | 5 |
...
使用“类别日”作为唯一键。我会根据列“a”和给定的限制范围为每个类别提取日期范围,如下所示:
1,2012-01-01|2012-01-04,4
1,2012-01-05|2012-01-07,5
1,2012-01-08|2012-01-10,4
1,2012-01-11|2012-01-12,5
1,2012-01-13|2012-01-15,0
1,2012-01-16|2012-01-19,5
或类似的。
我正在寻找最好的方法。最好只使用 mysql,但也可以使用一点 php。
NOTE1:不是所有的日子都被插入:两天之间非连续的日子不能是其他日子。在这种情况下,我将输出丢失的范围,列“a”= 0。
NOTE2:我用一个简单的查询和一些 php 行来做到这一点,但我不喜欢它,因为我的简单算法需要一个循环,每天在范围内乘以找到的每个类别。如果范围太大,类别太多,那就不好了。
最终编辑:好的!在阅读了所有 cmets 和答案后,我认为不存在有效、高效且同时具有可读性的解决方案。所以 Mosty Mostacho 的答案不是 100% 有效的解决方案,但它有 100% 有效的建议。谢谢大家。
【问题讨论】:
-
a的价值是多少,假设选择范围2012-01-01到2012-01-09 -
@safarov 1,2012-01-01|2012-01-04,4 1,2012-01-05|2012-01-07,5 1,2012-01-08|2012- 01-09,4
-
好的,现在我明白你想要什么了,但是只用mysql很难做到,其中一半可以在php中轻松完成
-
我认为您需要声明程序并使用循环来检查每个子组。我想不出任何其他选择
-
我认为你的例子是错误的。你的意思是
2012-01-12,5是最后一个值,对吧?