0

试图在最多(如果数据存在于一个或多个)四行中获得名称的计数(稍后乘以一个比率)。换句话说,每人占用一个房间是有价格的。所以,我想通过在表格中输入并保存在数据库表中的名称来计算房间里的人数。

可以简单地添加一个字段,除了填写姓名字段外,用户还可以选择人数,但这似乎是多余的(并且容易出错)。

设置

表:1.具有列的客户:

id, 
tourbk_id, 
tourstart, 
roomtype1, 
client1_name, 
client2_name, 
client3_name, 
client4_name

问题

我有一个查询,它当前检查房间类型到该房间类型的每人价格,并正在努力产生结果,但当然,它只返回(对于一个房间里的两个人)双人入住的价格人。

例如:(每人价格)...单人 = 10 美元;双 = 20 美元;三倍 = 30 美元;四边形 = 40 美元

我目前双人房的结果是 20 美元(在“每人价格”旁边回显。我需要一个查询来计算这个双人房的总人数和价格的倍数……“总计:查询 [$20 * 2]”

如何编写查询以计算表中的“client _name”条目?

4

3 回答 3

0

在这里,我添加了一个名为的虚拟列ClientCount,它是房间中客户的数量。我喜欢使用它,client1_name > ''因为无论您使用空格还是 NULL,它都有效,并且可以让我免于提问。

SELECT
    id, 
    tourbk_id, 
    tourstart, 
    roomtype1, 
    client1_name, 
    client2_name, 
    client3_name, 
    client4_name,
    CASE WHEN client1_name > '' THEN 1 ELSE 0 end +
    CASE WHEN client2_name > '' THEN 1 ELSE 0 end +
    CASE WHEN client3_name > '' THEN 1 ELSE 0 end +
    CASE WHEN client4_name > '' THEN 1 ELSE 0 end    ClientCount
FROM TBL
于 2012-10-22T23:25:35.747 回答
0

您应该考虑通过使用将单个名称列与单个预订标识符相关联的单独表来规范化您的架构:然后,多个客户将由该新表中的多个记录表示。您将计算客户:client_names

SELECT COUNT(*) FROM client_names WHERE booking_id = ...

但是,使用您当前的结构(并假设名称列是NULL如果没有这样的客户端),您可以这样做:

SELECT (client1_name IS NOT NULL)
     + (client2_name IS NOT NULL)
     + (client3_name IS NOT NULL)
     + (client4_name IS NOT NULL)
    AS client_count
FROM   clients
-- etc.
于 2012-10-22T23:21:39.297 回答
0

并且,作为一种迂回的方法,我想到了以下方法(只需要为1、2、3 和 4 ["if roomtype1='sgl', then $mult = 1,如果 roomtype='dbl',则 $mult=2...] 乘法器来检查其他房间类型):

$total = ($roomrate['roomprice'] * 2);
     echo "Total this booking : ";
     echo $total;

感谢大家的帮助!

于 2012-10-22T23:35:39.910 回答