查询计算MySQL行

时间:2012-10-22 23:14:44

标签: php mysql

尝试计算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”条目?

3 个答案:

答案 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;

感谢大家的帮助!