Php 一直在创建租金表
我想使用mysql创建一个php,以执行以下操作: 假设我有一家店铺想租,租金是每周或每月。我正在寻找创建此表的最佳方法,因此我可以进行简单的查询来计算免费周数或月数 编辑 假设我有 ID、开始日期、RENING类型、客户ID 其中开始日期是租赁的开始日期,租赁类型是每周或每月 我应该如何运行查询以了解所有空周或空月,以便新客户可以预订该周/月Php 一直在创建租金表,php,mysql,sql,database-design,Php,Mysql,Sql,Database Design,我想使用mysql创建一个php,以执行以下操作: 假设我有一家店铺想租,租金是每周或每月。我正在寻找创建此表的最佳方法,因此我可以进行简单的查询来计算免费周数或月数 编辑 假设我有 ID、开始日期、RENING类型、客户ID 其中开始日期是租赁的开始日期,租赁类型是每周或每月 我应该如何运行查询以了解所有空周或空月,以便新客户可以预订该周/月 例如,一个客户预订7月,另一个客户预订6月的第一周,如果一个新客户登录到我的系统并希望检查所有可用的周/月,我如何才能做到这一点?我不能建议采用整体方法
例如,一个客户预订7月,另一个客户预订6月的第一周,如果一个新客户登录到我的系统并希望检查所有可用的周/月,我如何才能做到这一点?我不能建议采用整体方法,但建议您首先简化任务。不要试图同时处理几个月和几个星期,只关注几个星期。您可以使用一些业务逻辑将一个月等同于四周 这样,你就可以从一开始就不用再租车了。而是包括预先计算和准确的工作日期,以及以周为单位的占用运行时间:
ID, CLIENT_ID, START_DATE, END_DATE, WEEKS
当一家商店每周或每月轮流出租时,也许几天可以更好地避免粒度问题。我不是什么查询专家,所以我实际上更喜欢在PHP中循环浏览日期,而不是使用自连接等
如果速度不够快(商店太多),我甚至会设计一个
CLIENT\u ID=0
filler来标记空闲点。这极大地简化了搜索,更新也不难。我假设开始日期是一个绝对的日期(从1970年1月1日开始),租用类型是持续时间(通过加入或仅此而已)。因此,您的脚本将执行以下操作(我未能用文字“对不起”进行描述)
/$reservations=array(开始日期=>object(id=>1,持续时间=>7,等等))
$remainingReservedDays=0;
对于($day=$start;$day<$end;$day++){
如果($remainingReservedDays>0){
回显“保留日期”
;//或灰显复选框或其他内容
$resainingreserveddays--;
}else if(设置($reservations[$day]){//从今天开始新预订
echo“保留的”;//TODO:让我干
$remainingReservedDays=$reservations[$day]->持续时间;
}否则{
echo“至少一周免费”;
//TODO检查该月是否可用
//查找下一个预订开始日期
}
}
此查询应返回预订之间的所有空闲时间间隔。如果尚未预订,它将获取所有可疑的空闲日(结束日+1),然后搜索下一个预订日。给你这样的输出
Start Free | End Free
-----------------------
2011-02-03 | 2011-02-06
2011-02-08 | 2011-02-12
2011-02-20 | 2011-03-02
然后,您可以使用PHP获得两者之间的确切日期
查询:
SELECT DATE_ADD(r2.end_date, INTERVAL 1 DAY),
(
SELECT DATE_SUB(MIN(starting_date), INTERVAL 1 DAY)
FROM renting_table as r1
WHERE r1.starting_date > r2.end_date
)
FROM renting_table as r2
WHERE DATE_ADD(end_date, INTERVAL 1 DAY) not in
(
SELECT r3.start_date
FROM renting_table as r3
)
注意:我对SQL非常生疏,所以语法可能会关闭,但我认为逻辑是合理的。我希望这至少能让你朝着正确的方向点头
假设我有一家我想去的商店
租金,租金将是每周或每月。
我在寻找最好的方法
创建此表,以便我可以轻松完成
查询以计算免费周数或
几个月
你知道如果有人想租你的店18天会发生什么吗?你要把它租给他们18天。一只鸟在手
- 存储结束日期。 租赁合同总是书面的 有具体的开始日期和结束日期 日期
- 从表中删除U类型。将其移动到用户界面可能比较方便。但是无论是用户界面还是数据库都不应该限制你只租一周或一个月
- 如果客户ID指的是所有者,则 不属于这张桌子。你 没法说服我主人是 取决于租期
- 如果客户ID指的是租户,则 应该在另一个地方 桌子虽然你的 业务需求决定了这一点 你只能租给一个人, 租这样的东西并不少见 一次向几个租户出售商店。 他们所有的名字都在租车合同上 协议,通常使他们 共同承担租金。(其中 其他事情。)
- 索引开始日期和结束日期列
现在,使用SamG的查询。请提供更多信息。。。此表包含什么样的数据以及您将运行什么样的查询?我添加了其他信息,很抱歉+1在请求时添加了其他信息。现在这是一个需要解决的问题。我认为你应该将第三段改写为:
假设我有一栋楼想出租,租金将是每周或每月。我正在搜索创建此表的最佳方法,以便计算可用周数或月数。
SELECT DATE_ADD(r2.end_date, INTERVAL 1 DAY),
(
SELECT DATE_SUB(MIN(starting_date), INTERVAL 1 DAY)
FROM renting_table as r1
WHERE r1.starting_date > r2.end_date
)
FROM renting_table as r2
WHERE DATE_ADD(end_date, INTERVAL 1 DAY) not in
(
SELECT r3.start_date
FROM renting_table as r3
)