Php 选择3个不同的表
我有3个表名为Php 选择3个不同的表,php,mysql,Php,Mysql,我有3个表名为rsales,rreturn,productlist。表rsales和rreturn有total列。我的目标是,我要将rsales中的所有total值和rreturn表中的total值相加,并仅从productlist表中选择特定值 比如说,我从productlist表中获得了以下数据: id | pcode | pname | pdesc | 1 | 222 | 33uf | 10v | id | total | pcode | 1 | 200 | 222
rsales
,rreturn
,productlist
。表rsales
和rreturn
有total
列。我的目标是,我要将rsales
中的所有total
值和rreturn
表中的total
值相加,并仅从productlist
表中选择特定值
比如说,我从productlist
表中获得了以下数据:
id | pcode | pname | pdesc |
1 | 222 | 33uf | 10v |
id | total | pcode |
1 | 200 | 222 |
2 | 200 | 222 |
id | total | pcode |
1 | 50 | 222 |
2 | 20 | 222 |
来自rsales
表的数据:
id | pcode | pname | pdesc |
1 | 222 | 33uf | 10v |
id | total | pcode |
1 | 200 | 222 |
2 | 200 | 222 |
id | total | pcode |
1 | 50 | 222 |
2 | 20 | 222 |
来自rreturn
表的数据:
id | pcode | pname | pdesc |
1 | 222 | 33uf | 10v |
id | total | pcode |
1 | 200 | 222 |
2 | 200 | 222 |
id | total | pcode |
1 | 50 | 222 |
2 | 20 | 222 |
输出必须如下所示:
id | pcode | pname | pdesc | total
1 | 222 | 33uf | 10v | 470
我的问题是:我想对rsales
和rreturn
表中的所有total
值求和,然后从productlist
中选择所有值。我有下面的代码,运行得很好。但它只能对rsales
表中的总值求和,或者更确切地说,它只能对单个表中的值求和
$result = mysql_query("SELECT
productlist.*,
SUM(rsales.total) as total,
SUM(rsales.vatable_sales) as vatable_sales,
SUM(rsales.vats) as vats,
SUM(rsales.discount) as discount
FROM productlist
LEFT JOIN rsales ON rsales.pcode = productlist.pcode
GROUP BY pcode
ORDER BY total ASC");
你不太清楚什么不适合你。你是否得到了结果,但数字并不是你所期望的?好吧,假设你有三次销售和两次退货,那么通过合并所有表,你会得到六条记录。因此,你的销售额翻了一番,回报翻了三倍 对于一个解决方案,您可以加入聚合:
$result = mysql_query("SELECT
productlist.*,
sumsales.sum_total + sumreturns.sum_total as total,
sumsales.sum_vatable_sales as vatable_sales,
sumsales.sum_vats as vats,
sumsales.sum_discount as discount
FROM productlist
LEFT JOIN
(
SELECT pcode, SUM(total) as sum_total, SUM(vatable_sales) as sum_vatable_sales, SUM(vats) as sum_vats, SUM(discount) as sum_discount
FROM rsales
GROUP BY pcode
) AS sumsales ON sumsales.pcode = productlist.pcode
LEFT JOIN
(
SELECT pcode, SUM(total) as sum_total
FROM rreturn
GROUP BY pcode
) AS sumreturns ON sumreturns.pcode = productlist.pcode
ORDER BY total ASC");
你不太清楚什么不适合你。你是否得到了结果,但数字并不是你所期望的?好吧,假设你有三次销售和两次退货,那么通过合并所有表,你会得到六条记录。因此,你的销售额翻了一番,回报翻了三倍 对于一个解决方案,您可以加入聚合:
$result = mysql_query("SELECT
productlist.*,
sumsales.sum_total + sumreturns.sum_total as total,
sumsales.sum_vatable_sales as vatable_sales,
sumsales.sum_vats as vats,
sumsales.sum_discount as discount
FROM productlist
LEFT JOIN
(
SELECT pcode, SUM(total) as sum_total, SUM(vatable_sales) as sum_vatable_sales, SUM(vats) as sum_vats, SUM(discount) as sum_discount
FROM rsales
GROUP BY pcode
) AS sumsales ON sumsales.pcode = productlist.pcode
LEFT JOIN
(
SELECT pcode, SUM(total) as sum_total
FROM rreturn
GROUP BY pcode
) AS sumreturns ON sumreturns.pcode = productlist.pcode
ORDER BY total ASC");
请向我们展示样本数据。以及该数据的预期输出。我已经提供了一个示例。请向我们展示样本数据。以及该数据的预期输出。我已经提供了一个示例