PHP MySQL查询(来自不同行的总和)

时间:2015-06-15 20:34:04

标签: php mysql database

我有一个小型MySQL数据库用于在线预订日历。现在我想从这个日历中得到一些统计数据。我在日历值中添加每个条目(全额付款,部分付款和状态(付费,未付,保留等))。

我附上了截图的图片。如您所见,有4种不同的custom_attribute_id。 ID 1保存状态,ID 2保存全价,ID 3保存已支付的价格。列entity_id将其保存在一起。所以例如entity_id 232的所有4个条目都属于一起。

我现在要显示以下内容: 1.所有全价的总和(所以custom_attribute_id 2)。我已经完成了这段代码:

$result = mysql_query('SELECT SUM(attribute_value) AS value_sum
FROM custom_attribute_values WHERE custom_attribute_id=2');
$row = mysql_fetch_assoc($result);
$sum = $row['value_sum'];

这是有效的,并向我显示在日历中输入的所有全价的总和。

使用相同的代码,我也会显示已部分支付金额的总和。

但是现在问题是,我想根据状态显示attribute_value的总和。因此,当custom_attribute_id = 2且相关entity_id的attribute_value为“Reserviert”时,代码应汇总所有值。

如果有人可以帮助我,或者至少让我知道,如果可能的话,那会非常好。我无法重新设计数据库,因为此代码是从日历系统中提供的。

这里的db为text:

ID custom_attribute_value_id attribute_value entity_id attribute_category
1124 1 Anfrage 233 1
1125 2 1188 233 1
1126 4 233 1
1127 3 015757817858 233 1
1053 1 Reserviert 232 1
1054 2 1700 232 1
1057 3 017697544266 232 1
1058 4 232 1
1039 2 573 231 1
1040 3 088259216300 231 1
1042 1 Reserviert 231 1
1037 3 0043676845617203 230 1
1045 2 2346,50 230 1
1046 1 Reserviert 230 1
1032 1 Anfrage 229 1
1033 2 474 229 1
1034 3 229 1
1027 1 Anfrage 228 1
1029 3 228 1
1030 2 588,50 228 1
1024 3 01729843043 227 1
1025 1 Reserviert 227 1
1023 2 990 227 1

3 个答案:

答案 0 :(得分:1)

这应该是

 $result = mysql_query('SELECT SUM(attribute_value) AS value_sum
             FROM custom_attribute_values 
             WHERE custom_attribute_id=2 AND entity_id = \'Reserviert\'');

答案 1 :(得分:1)

您需要自我加入,这样您就可以在每个实体的同一行中同时拥有状态和相关的全价。基本上,您只使用状态数据和表的另一部分,只使用完整的价格数据,并将它们连接到同一实体ID。在结果集上,您可以轻松获得总和,同时使用WHERE将行限制为具有“Reserviert”状态的行。

SELECT SUM(t2.attribute_value) AS value_sum
FROM custom_attribute_values t1 JOIN custom_attribute_values t2
  ON t1.entity_id = t2.entity_id
  AND t1.custom_attribute_id = 1
  AND t2.custom_attribute_id = 2
WHERE t1.attribute_value = 'Reserviert'

在此查询中,attribute_value保存t1的状态信息和t2的全价。

答案 2 :(得分:0)

你可以使用子选择来获得像这样的值

SELECT entity AS e,
  (SELECT SUM(value) FROM custom_attribute_values WHERE entity = e AND attribute = 2) AS s
FROM custom_attribute_values
WHERE value = 'Reserviert'

你的表格和专栏名称不清楚,所以我做了一些......

第一个SELECT选择所有' Reserviert'实体然后子选择将与每个拾取的实体相关联的值相加。

这是我使用的数据,名称为serial,attribute,value,entity,x

1124, 1, Anfrage,      233, 1
1125, 2, 1188,         233, 1
1126, 4, ,             233, 1
1127, 3, 015757817858, 233, 1
1053, 1, Reserviert,   232, 1
1054, 2, 1700,         232, 1
1057, 3, 017697544266, 232, 1
1058, 4, ,             232, 1
1039, 2, 573,          231, 1
1040, 3, 088259216300, 231, 1
1042, 1, Reserviert,   231, 1
1037, 3, 004367684561, 230, 1
1045, 2, 2346.50,      230, 1
1046, 1, Reserviert,   230, 1
1032, 1, Anfrage,      229, 1
1033, 2, 474,          229, 1
1034, 3, ,             229, 1
1027, 1, Anfrage,      228, 1
1029, 3, ,             228, 1
1030, 2, 588.50,       228, 1
1024, 3, 01729843043,  227, 1
1025, 1, Reserviert,   227, 1
1023, 2, 990,          227, 1