Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一直在创建租金表_Php_Mysql_Sql_Database Design - Fatal编程技术网

Php 一直在创建租金表

Php 一直在创建租金表,php,mysql,sql,database-design,Php,Mysql,Sql,Database Design,我想使用mysql创建一个php,以执行以下操作: 假设我有一家店铺想租,租金是每周或每月。我正在寻找创建此表的最佳方法,因此我可以进行简单的查询来计算免费周数或月数 编辑 假设我有 ID、开始日期、RENING类型、客户ID 其中开始日期是租赁的开始日期,租赁类型是每周或每月 我应该如何运行查询以了解所有空周或空月,以便新客户可以预订该周/月 例如,一个客户预订7月,另一个客户预订6月的第一周,如果一个新客户登录到我的系统并希望检查所有可用的周/月,我如何才能做到这一点?我不能建议采用整体方法

我想使用mysql创建一个php,以执行以下操作:

假设我有一家店铺想租,租金是每周或每月。我正在寻找创建此表的最佳方法,因此我可以进行简单的查询来计算免费周数或月数

编辑

假设我有

ID、开始日期、RENING类型、客户ID

其中开始日期是租赁的开始日期,租赁类型是每周或每月

我应该如何运行查询以了解所有空周或空月,以便新客户可以预订该周/月


例如,一个客户预订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
)