首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP和MySql有日期问题...?

PHP和MySql有日期问题...?
EN

Stack Overflow用户
提问于 2011-04-26 15:38:35
回答 3查看 228关注 0票数 5

在我的项目中,我使用了一个名为"Compensation“的表格,就像.....

代码语言:javascript
运行
复制
+--------------------------------------------------------------+
| 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 |
.......................

这里是date represents that the compensation is changed on that particular date。对于receiver 5,从the date 2011年2月15日12:15:01至2011年4月21日19:05:00`,补偿为50%before Feb 15 2011. And the compensation is45%。以此类推...

在这里,当我为receiver 5的月份日期创建invoice时,我必须使用compensation as 45% use 21 April 2011和for 22 April 2011 to 30 April 2011 I have to use 60%作为补偿...

但是如何获得一个月或两个日期之间的补偿,因为补偿可能在一个月内多次修改,如id4和5所示......

请帮我做上面的writing SQL,或者我不得不在table structure上做changes来使它变得简单......?

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-26 15:59:27

当您的表同时跟踪有效起始日期和有效终止日期时,这会容易得多:

代码语言:javascript
运行
复制
+--------------------------------------------------------------+---------------------+
| Id  |  receiver_Id   |  compensation   |      date_from      |      date_to        |
|--------------------------------------------------------------|---------------------|
| 1   |  5             |  50%            | 2011-02-15 12:15:00 | 2011-04-21 19:05:00 | 
| 2   |  3             |  40%            | 2011-04-05 18:35:00 | 2011-04-25 06:24:00 | 
| 3   |  3             |  30%            | 2011-04-25 06:24:00 | 0000-00-00 00:00:00 | 
| 4   |  5             |  45%            | 2011-04-21 19:05:00 | 2011-04-30 12:05:00 | 
| 5   |  5             |  60%            | 2011-04-30 12:05:00 | 0000-00-00 00:00:00 |
.......................

然后您可以查询:

代码语言:javascript
运行
复制
SELECT * FROM compensations
    WHERE (date_to > $start_of_month OR date_to = 0 )
    AND date_from < $end_of_month;
票数 5
EN

Stack Overflow用户

发布于 2011-04-26 16:08:36

实际上,日期列看起来更像是日期-时间类型,而不是日期类型,而是:

代码语言:javascript
运行
复制
select * from yourtable where date between 'yourfirstdate' and 'yourlastdate'

但是,请注意,如果您在日期中指定了窄间隔,那么您的查询将不会返回任何结果(即使使用Sander Marechal原始解决方案),因此更好的选择是检查较大的间隔或始终查询10个最新的行,并在代码级应用日期过滤。

票数 1
EN

Stack Overflow用户

发布于 2011-04-26 16:24:38

第一个sql将获取当前月/年

第二个sql显示它使用特定的月/年进行了硬编码

代码语言:javascript
运行
复制
SELECT * FROM compensations
    WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW());


SELECT * FROM compensations
    WHERE YEAR(date) = '2011' AND MONTH(date) = '4';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5787353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档