PHP 和 MySql 的日期问题...?
在我的项目中,我使用一个名为“补偿”的表,例如......
+--------------------------------------------------------------+
| Id | receiver_Id | compensation | date |
|--------------------------------------------------------------|
| 1 | 5 | 50% | 2011-02-15 12:15:00 |
| 2 | 3 | 40% | 2011-04-05 18:35:00 |
| 3 | 3 | 30% | 2011-04-25 06:24:00 |
| 4 | 5 | 45% | 2011-04-21 19:05:00 |
| 5 | 5 | 60% | 2011-04-30 12:05:00 |
.......................
这里的日期表示补偿在该特定日期发生变化
。对于接收者 5
,2011 年 2 月 15 日之前的补偿为 50%。自
45%该日期
起,补偿为 >2011年2月15日12:15:01至2011年4月21日19:05:00`。依此类推....
这里,当我为 receiver 5
创建 2011 年 4 月
的 invoice
时,我必须使用 >截至
,在2011年4月21日
为止的补偿为45%2011年4月22日至2011年4月30日期间,我必须使用60%
作为补偿...
但是如何获取一个月或两个日期之间的补偿,因为补偿可能在一个月内多次修改,如 id 4 和 5 所示......
请帮助我为上述内容编写 SQL
或者我必须对表结构
进行更改
以使其简单......?
提前致谢
In my project I am using a table named "Compensation" like.....
+--------------------------------------------------------------+
| Id | receiver_Id | compensation | date |
|--------------------------------------------------------------|
| 1 | 5 | 50% | 2011-02-15 12:15:00 |
| 2 | 3 | 40% | 2011-04-05 18:35:00 |
| 3 | 3 | 30% | 2011-04-25 06:24:00 |
| 4 | 5 | 45% | 2011-04-21 19:05:00 |
| 5 | 5 | 60% | 2011-04-30 12:05:00 |
.......................
Here the date represents that the compensation is changed on that particular date
. For receiver 5
, the compensation is 50%before Feb 15 2011. And the compensation is
45%from
the date
15 Feb 2011 12:15:01 to 21 April 2011 19:05:00`. And so on....
Here When I create invoice
for the month APRIL 2011
for the receiver 5
, I have to use the compensation as 45%
till date 21 April 2011
and for 22 April 2011 to 30 April 2011 I have to use 60%
as compensation...
But How to get the compensation for a month or between 2 dates since the compensation may be modified multiple times in a month as id 4 and 5 shows.......
Please help me writing SQL
for the above OR I have to make changes
on the table structure
to make it simple......?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当您的表同时跟踪有效起始日期和有效截止日期时,这会容易得多:
然后您可以查询:
This would be much easier when your table tracked both valid-from and valid-to dates:
Then you can query:
第一个 sql 将获取当前月份/年份,
第二个 sql 显示它是用特定月份/年份硬编码的
the first sql will fetch the current month/year
the 2nd sql shows it hardcoded with a specific month/year
实际上,您的日期列看起来更像是日期时间类型而不是日期,但是:
但是请注意,如果您指定日期中的狭窄间隙,那么您的查询将无法返回任何结果(即使使用 Sander Marechal 原始解决方案),因此更好的选择是检查较大的间隙或始终查询 10 个最新行并在代码级别应用日期过滤。
actually your date column looks more like date-time type not date but:
however be aware that if you specify narrow gap in dates then your query can't return any results (even with Sander Marechal original solution) so a better option would be to check on larger gaps or always query 10 newest rows and apply the date filtering in code level.