这是我的表定义:
CREATE TABLE orders_total (
orders_total_id int unsigned NOT NULL auto_increment,
orders_id int NOT NULL,
title varchar(255) NOT NULL,
text varchar(255) NOT NULL,
value decimal(15,4) NOT NULL,
class varchar(32) NOT NULL,
sort_order int NOT NULL,
PRIMARY KEY (orders_total_id),
KEY idx_orders_total_orders_id (orders_id)
);
填充的表格看起来像这样(我记忆中所有已编号的数字):
1 - 13 - Shipping - $7.50 - 7.50 - ot_shipping - 2
2 - 13 - Tax - $8.00 - 8.00 - ot_tax - 4
3 - 13 - Total - $56.67 - 56.67 - ot_total - 3
4 - 14 - Shipping - $5.55 - 5.55 - ot_shipping - 2
5 - 14 - Discount - $6.40 - 6.40 - ot_discount - 1
6 - 14 - Coupon - $10.00 - 10.00 - ot_coupon - 5
7 - 14 - Total - $150.25 - 150.25 - ot_total - 3
每个订单都可以有不同的类,并非所有订单都必须具有确切的类数。例如:
我想写一个查询我的订单表的查询(这里没有显示),并加入上面的表(orders_total),只有当“class”为“ot_total”时才抓取“value”列, “ot_coupon”或“ot_discount”。
以下是我尝试创建此类查询:
SELECT o.orders_id, o.customers_name, group_concat(ot.value) AS values
FROM orders o
LEFT JOIN orders_total ot
ON ot.orders_id = o.orders.id
GROUP BY o.orders_id
以上查询会产生如下内容:
第一组结果:
orders_id => 13
customers_name => John Doe
values => 7.50,8.00,56.67
第二组结果:
orders_id => 14
customers_name => Jane Roe
values => 5.55,6.40,10.00,150.25
正如你所看到的,这些值给了我所需要的东西,但我不知道哪个数字属于哪个类。我只对ot_total,ot_discount和ot_coupon感兴趣。
任何人都可以想到任何解决方案?
是否有可能以某种方式将类名附加到值?所以我可以有类似值=> ot_shippimh7.50,ot_tax8.00,ot_total56.67
答案 0 :(得分:0)
你可以这样做:
SELECT o.orders_id, o.customers_name,
GROUP_CONCAT(CONCAT( ot.class, ot.value)) AS values
FROM orders o
LEFT JOIN orders_total ot
ON ot.orders_id = o.orders.id
WHERE ot.class in ("ot_total", "ot_coupon", "ot_discount")
GROUP BY o.orders_id
BTW:您可以通过从orders_total
中删除类字段来做得更好,添加一个名为Classes
的新表,而不是包含类列表然后添加一个对此表格的外键引用到orders_total
。