坚持创造租赁表

时间:2011-03-18 22:02:52

标签: php mysql sql database-design

我想创建一个带有mysql的php来执行以下操作:

假设我有一个我想租的商店,租金是每周或每月。我正在寻找创建此表的最佳方法,因此我可以轻松查询以计算免费的数周或数月。

修改

让我说我有

  

ID,START_DATE,RENING_TYPE,CLIENT_ID

其中Start_date是租借的开始日期,RENTING_TYPE是每周或每月

如何运行查询以了解所有空的周或月,以便新客户可以保留该周/月

例如客户保留7月份另一个客户预留6月的第一周,如果新客户登录到我的系统并想要检查所有可用的周/月,我该如何实现?

4 个答案:

答案 0 :(得分:2)

此查询应返回预订之间的所有空闲间隔。如果尚未预订,它将获得所有可疑的免费日(结束日+ 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非常生疏,所以语法可能会关闭,但我认为逻辑是合理的。我希望这至少让你朝着正确的方向点头!

答案 1 :(得分:1)

我无法建议整体方法,但建议您先简化分配。而不是试图处理数月和数周,只需专注于几周。您可以使用一些业务逻辑来等同一个月到四周。

因此你开始摆脱RENTING_TYPE。而是包含预先计算的和准确的日期,以及WEEKS中的职业运行时间:

ID, CLIENT_ID, START_DATE, END_DATE, WEEKS

当商店每周或每月交替出租时,也许DAYS可以更好地规避粒度问题。不是一个查询专家,所以我实际上更喜欢在PHP中循环使用日期而不是使用自联接等。

如果这还不够快(商店太多),我甚至会设计一个CLIENT_ID=0填充物来标记自由点。这极大地简化了搜索,并且更新并不困难。

答案 2 :(得分:0)

我假设START_DATE是绝对日期(#从1.1.1970开始),RENTING_TYPE是持续时间(通过JOIN或只是)。因此,您的脚本将执行以下操作(我没有用语言描述抱歉)

//$reservations = array(start_date => object(id=>1,duration=>7,etc..))
$remainingReservedDays = 0;
for($day = $start;$day < $end;$day++){
    if($remainingReservedDays > 0){
        echo 'reserved day<br />';//or grayed out checkbox or whatever
        $remainingReservedDays--;
    } else if(isset($reservations[$day])){ //new reservation starting today
        echo 'reserved<br />';//TODO: make me DRY
        $remainingReservedDays = $reservations[$day]->duration;
    } else {
        echo 'free atleast for a week';
        //TODO check if available for month
        //lookup next reservation start_date
    }
}

答案 3 :(得分:0)

  

让我说我有一个我想要的商店   租金,租金,每周或每月。   我正在寻找最好的方式   创建这个表,所以我可以轻松做到   查询计算免费周或   个月。

你知道如果有人想租你的店铺18天会发生什么事吗?你打算把它租给他们18天。一只鸟在手中。 。

  • 存储结束日期。 租赁合同总是写的 具体的开始日期和结束 日期。
  • 从表中删除rental_type。将其移动到用户界面可能很方便。但是,用户界面和数据库都不应限制您只租用一周或一个月。
  • 如果CLIENT_ID引用所有者 不属于此表。您 不能说服主人是我 取决于租赁期。
  • 如果CLIENT_ID指向租户,则为 应该可能在另一个 表。虽然你有可能 业务要求决定了这一点 你只会租给一个人, 租像这样的东西并不罕见 一次向几个租户开店。 他们所有的名字都出租了 协议,通常是他们 共同承担租金责任。 (其中 其他的东西。)
  • 索引开始日期和结束日期列。

现在,使用SamG的查询。