我会尝试尽可能地解释这一点。我正在使用预订软件,我们正在尝试增加更多的灵活性"现在我已经失去了一些功能。
我处理房间和房间类型。以前每次我们制作新的房间功能时,我们都会创建一个独立的房间类型。但是每次添加功能时,都必须创建多个新类型,因为一个房间可能有多种类型和功能。
这是数据库现在的样子:
rooms roomTypes roomType_Locker roomFeatures roomFeature_Locker
----- --------- --------------- ------------ ------------------
rid tid tid fid fid
rnum tcode rid fcode rid
<other> <other> <other>
groups typeGroup_Locker featureGroup_Locker res resFeatures
------ ---------------- ------------------- --- -----------
gid gid gid resid resid
gname tid fid startdate fid
<other> rid (normally null) enddate
我认为第一行很有说服力,房间,房间类型,房间特征和他们的&#34;储物柜&#34;正如我所说的那样。
会议室可以是多个类型,并且具有多个功能。对于房间功能,每个房间作为&#34;默认&#34;特征。 (但是我可以摆脱它,如果在功能数据库中总有某些东西,它只是我可以处理查询的一种方式。)
Examples of types: Examples of features:
King Bed Default
Double Beds OceanFront
Studio First Floor
Suite Remodeled
Any
群组是我们向内部员工展示可用性的方式。它只是一种将房间类型和功能分组以便于查看的方法。
所以组的一些例子: 总计(此组将包括所有类型 - typeGroup_Locker将为每种类型提供一个条目 - &#34;默认&#34;当前 - featureGroup_Locker将具有gid和&#34;默认&#34;仅限功能 - )我正在寻找可用和正在使用的房间总数 特大床(此组仅包括特大床类型,但所有功能)。 OceanFront(此组将是所有类型,但只有OceanFront功能)。 等...
我遇到的问题是我不止一次计算房间,我尝试了大约25种不同的查询组合。
我可以获得每个&#34;组的最大#和#34;相当容易。困难在于我试图展示&#34;预订&#34; vs&#34;使用&#34;。预订将是使用该特定类型预订的房间数量&amp;功能(功能)。 &#34;使用&#34;如果房间被使用,但不一定要预订。
以下是我的代码的一些示例:
此查询抓取所有tids&amp; &#34; Group&#34;:
的fidsSELECT roomTypes.tcode, roomTypes.tid,
roomFeatures.fcode, roomFeatures.fid
FROM roomTypes
JOIN roomTypeGroup_Locker ON roomTypes.tid = roomTypeGroup_Locker.tid
LEFT JOIN roomFeaturesGroup_Locker ON roomFeaturesGroup_Locker.gid = roomTypeGroup_Locker.gid
LEFT JOIN roomFeatures ON roomFeatures.fid = roomFeaturesGroup_Locker.fid
WHERE roomTypeGroup_Locker.gid='{$gid}'
然后在该循环内部,我一直在执行此查询:
SELECT COUNT(*) as the_count
FROM res,
rooms,
roomTypes,
roomType_Locker,
roomTypeGroup_Locker,
roomFeatures,
roomFeatures_Locker,
roomFeaturesGroup_Locker
WHERE res.startdate <= '$entry'
AND res.enddate >= '$entry'
AND res.rnum = rooms.rnum
AND rooms.rid = roomType_Locker.rid
AND roomType_Locker.tid = roomTypes.tid
AND roomTypes.tid = roomTypeGroup_Locker.tid
AND roomTypeGroup_Locker.gid = '{$gid}'
AND res.tcode = '$tcode'
AND res.tcode = roomTypes.tcode
AND rooms.rid = roomFeatures_Locker.rid
AND roomFeatures_Locker.fid = roomFeatures.fid
AND roomFeatures.fid = roomFeaturesGroup_Locker.fid
AND roomFeatures.fid = '{$fid}'
AND roomFeaturesGroup_Locker.gid = roomTypeGroup_Locker.gid
我要做的是确定&#34; USAGE&#34;类型和与我正在查看的群组相匹配的功能。因为有人可以选择一个&#34; ANY&#34;类型,&#34; OceanFront&#34;特征。从技术上讲,这是一个特大床&#34;,&#34; OceanFront&#34;。
有更简单的方法吗?我想到我必须将所有数据存储在某种形式的数组中并在本地进行处理。之前我只用一些SQL查询来获取数据。
我现在正在寻找任何指导,即使这意味着要废弃并重新开始。
非常感谢任何帮助!