拉出多个小计

时间:2017-07-26 13:10:57

标签: mysql sql

我会尝试尽可能地解释这一点。我正在使用预订软件,我们正在尝试增加更多的灵活性"现在我已经失去了一些功能。

我处理房间和房间类型。以前每次我们制作新的房间功能时,我们都会创建一个独立的房间类型。但是每次添加功能时,都必须创建多个新类型,因为一个房间可能有多种类型和功能。

这是数据库现在的样子:

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;:

的fids
SELECT 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查询来获取数据。

我现在正在寻找任何指导,即使这意味着要废弃并重新开始。

非常感谢任何帮助!

0 个答案:

没有答案