尝试计算upto(如果数据存在于一个或多个)四行中的名称(稍后用速率乘以)。换句话说,每个人占用房间的价格。所以,我想用表格中输入的名字计算房间里的人数并保存在数据库表中。
我可以简单地添加一个字段,除了完成名称字段外,用户还会选择人数,但这似乎是多余的(并且容易出错)。
表:1。客户,其中包含以下列:
id,
tourbk_id,
tourstart,
roomtype1,
client1_name,
client2_name,
client3_name,
client4_name
我有一个查询,目前检查房型是否为该房型的每人价格,并且正在努力产生结果,但当然,它只返回(对于一个房间中的两个人)双人的价格人占用。
例如:(每人价格)......单身= 10美元; double = $ 20;三倍= 30美元; quad = $ 40
我目前双人房的结果是20美元(这是“人均价格”旁边的回音。我需要一个查询来统计这个双倍的人数和倍数......“总计:查询[$ 20 * 2 ]“
如何对查询进行编码以计算表中的“client _name”条目?
答案 0 :(得分:0)
您应该通过一个单独的client_names
表来考虑normalising您的架构,该表将单个名称列与单个预订标识符相关联:然后,多个客户端将由该新表中的多个记录表示。您可以通过以下方式计算客户:
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.
答案 1 :(得分: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
答案 2 :(得分:0)
并且,作为一种循环的方式,我想到了以下也可以工作(只需要为1,2,3和4 [案例] roomtype1 ='sgl',然后$ mult = 1,如果roomtype ='dbl',则$ mult = 2 ...]乘用以检查其他房间类型):
$total = ($roomrate['roomprice'] * 2);
echo "Total this booking : ";
echo $total;
感谢大家的帮助!