![](/img/trans.png)
[英]How to make php get last row from a Colum from mysql and make the result a variable that I can take with javascript?
[英]MySQL pivot to make a row into a colum
我有三个表, products
, customers
, order
产品:
id | name |
1 | milk |
2 | bread|
3 | Pea |
顾客:
id | name | category
1 | James | retailer
2 | Paul | vendor
3 | Dave | retailer
订购:
id | product_id | customer_id | qty | price
1 | 1 | 2 | 23 | 50
2 | 2 | 2 | 4 | 30
3 | 3 | 2 | 6 | 10
4 | 2 | 1 | 9 | 30
5 | 3 | 1 | 2 | 10
6 | 1 | 3 | 6 | 50
7 | 3 | 3 | 7 | 10
当我进行查询以显示按vendor
类别的客户进行的交易时
SELECT customer.name, product.name as pname, order.qty, order.price FROM customer, product, order
WHERE customer.id = order.customer_id
AND product.id = order.product_id AND customer.category = "vendor"
我会得到类似的东西:
name | pname | qty | price
Paul | milk | 23 | 50
Paul | bread | 4 | 30
Paul | pea | 6 | 10
我想要这个代替:
name | milk | bread | pea | total
Paul | 23 | 4 | 6 | 90
虽然零售商的外观如下所示:
SELECT customer.name, product.name as pname, order.qty, order.price FROM
customer, product, order
WHERE customer.id = order.customer_id
AND product.id = order.product_id AND customer.category = "retailer"
我会得到一个这样的表:
name | pname | qty | price
James | bread | 9 | 30
James | pea | 2 | 10
Dave | milk | 6 | 50
Dave | pea | 7 | 10
但是我想要这个:
name | milk | bread | pea | total
James | 0 | 9 | 2 | 40
Dave | 6 | 0 | 7 | 60
只需使用条件聚合来旋转列。 并确保使用显式联接而不是已弃用的隐式联接,因为前者在ANSI-92中已成为25年的标准。
SELECT c.name,
SUM(CASE WHEN p.name = 'milk' THEN o.qty ELSE 0 END) as milk,
SUM(CASE WHEN p.name = 'bread' THEN o.qty ELSE 0 END) as bread,
SUM(CASE WHEN p.name = 'pea' THEN o.qty ELSE 0 END) as pea,
SUM(o.price) AS Total
FROM `customer` c
INNER JOIN `order` o
ON c.id = o.customer_id
INNER JOIN `product` p
ON p.id = o.product_id
WHERE c.category = 'vendor' -- same for retailer
GROUP BY c.name
我认为您不能直接从一个简单的选择中获得这种响应结构
name | milk | bread | pea | total
James | 0 | 9 | 2 | 40
Dave | 6 | 0 | 7 | 60
因为您的数据库正在为每个零售商/客户订单排一行。
我知道使用诸如PHP或Java之类的服务器语言,您将可以处理数据并根据需要进行检索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.