我有一个小型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
答案 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