0

我正在用 php 制作预订系统。我目前正在就在数据库中存储项目的最佳方式提出一些建议。我目前有3张桌子:

Table 1 = Hire Stock (Primary Key = asset_id)

(包含特定于项目的字段,例如尺寸、重量、功耗

Table 2 = Project  (Primary Key = project_id)

(包含项目开始日期、结束日期、客户名称。)

Table 3 = availability  (Primary Key = asset_id)

(每次将项目添加到项目中时,它都会与项目 ID 一起存储在这里)

我需要能够搜索库存中的每件物品,并在需要时检查它是否可供出租。如果我必须遍历比较日期范围的每个项目,那将需要很长时间。有没有更好的方法来存储数据?更好的方法来搜索它?

4

1 回答 1

0

您的架构似乎很明智。只需正确加入表格并测试您的asset_id 是否不在分配给日期范围与您需要的新项目期间重叠的任何项目中。假设您已经创建了新项目并希望将产品分配给它。

你想要一个类似这样的查询:

$query= "select * from Hire_Stock h ".
"Where h.asset_id not in ".
"( Select a.asset_id from availability a, Project p2, Project p1 ".
"Where p1.project_id = :new_proj ". // The id of the new/planned project
"and p2.project_id != p1.project_id ".
"and p2.end_date >= p1.start_date ".
"and p2.start_date <= p1.end_date ".
"and a.project_id = p2.project_id )";

// using oracle oci

$pok=oci_parse($conn,$query);

if (!$pok) die("Query ($query) Failed!<br>");

oci_bind_by_name($pok,':new_proj',$new_proj,-1);

$res=oci_execute($pok);

While ($hs_row=oci_fetch_array($pok),OCI_ASSOC)
(
  extract($hs_row);
  :
)
于 2013-07-23T00:35:42.500 回答