Php 从被推荐的用户那里获取支付金额的总和
我正在开发一个推荐系统,作为该仪表板的一部分,我需要输出用户收到的推荐数量、他们因这些推荐购买物品而获得的硬币总数,以及最终购买物品的推荐数量和总额 例如,显示用户_ID 1的信息: 我的表格结构如下: 使用者 购买 目前我正在运行这个查询。出于某种原因,我无法理解这个问题,在本例中,它只获取与id=2匹配的第一个用户的和。countid=3,但sumamount=10.00,而不是预期的14.00。有什么想法吗Php 从被推荐的用户那里获取支付金额的总和,php,mysql,Php,Mysql,我正在开发一个推荐系统,作为该仪表板的一部分,我需要输出用户收到的推荐数量、他们因这些推荐购买物品而获得的硬币总数,以及最终购买物品的推荐数量和总额 例如,显示用户_ID 1的信息: 我的表格结构如下: 使用者 购买 目前我正在运行这个查询。出于某种原因,我无法理解这个问题,在本例中,它只获取与id=2匹配的第一个用户的和。countid=3,但sumamount=10.00,而不是预期的14.00。有什么想法吗 SELECT count(id) AS count, (SELECT COALE
SELECT count(id) AS count,
(SELECT COALESCE(sum(amount), 0.00)
FROM purchases
WHERE purchases.user_id = users.id
AND payment_status = "Completed"
) AS purchases_amount,
(SELECT COALESCE(sum(round(amount) * 10), 0)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
) AS coins_earned,
(SELECT count(purchase_id)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
) AS purchases_count
FROM (`users`)
WHERE `referred_by` = '1'
AND `created` >= '2015-01-01 00:00:00' // created = user's registration date
AND `created` <= '2015-12-31 23:59:59'
您遇到了MySQL问题,它允许聚合与非聚合在没有适当分组的情况下进行组合。其他RDBMS会抱怨您的查询,因为第一列中的计数聚合与查询其余部分返回的多行冲突 尝试删除select countid AS count中的第一列,您将看到查询为每个用户id 2、3和4返回一行 要解决此问题,请将每个子查询的所有结果相加:
SELECT count(id) AS count,
sum((SELECT COALESCE(sum(amount), 0.00)
FROM purchases
WHERE purchases.user_id = users.id
AND payment_status = "Completed"
)) AS purchases_amount,
sum((SELECT COALESCE(sum(round(amount) * 10), 0)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
)) AS coins_earned,
sum((SELECT count(purchase_id)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
)) AS purchases_count
FROM (`users`)
WHERE `referred_by` = '1'
AND `created` >= '2015-01-01 00:00:00' // created = user's registration date
AND `created` <= '2015-12-31 23:59:59'
我相信你可以试试这个
SELECT
COALESCE(SUM(amount), 0.00) AS purchases_amount,
COALESCE(SUM(ROUND(amount) * 10), 0) AS coins_earned,
COUNT(purchase_id) AS purchases_count
FROM purchases
WHERE
payment_status = "Completed"
AND user_id IN (
SELECT id FROM users
WHERE `referred_by` = '1'
AND `created` >= '2015-01-01 00:00:00'
AND `created` <= '2015-12-31 23:59:59'
)
这似乎可以从一些SQL简化和分组中获益
SELECT count(id) AS count,
(SELECT COALESCE(sum(amount), 0.00)
FROM purchases
WHERE purchases.user_id = users.id
AND payment_status = "Completed"
) AS purchases_amount,
(SELECT COALESCE(sum(round(amount) * 10), 0)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
) AS coins_earned,
(SELECT count(purchase_id)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
) AS purchases_count
FROM (`users`)
WHERE `referred_by` = '1'
AND `created` >= '2015-01-01 00:00:00' // created = user's registration date
AND `created` <= '2015-12-31 23:59:59'
count: 3 (expected: 3)
purchases_amount: 10.00 (expected: 14.00)
coins_earned: 100 (expected: 140)
purchases_count: 1 (expected: 2)
SELECT count(id) AS count,
sum((SELECT COALESCE(sum(amount), 0.00)
FROM purchases
WHERE purchases.user_id = users.id
AND payment_status = "Completed"
)) AS purchases_amount,
sum((SELECT COALESCE(sum(round(amount) * 10), 0)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
)) AS coins_earned,
sum((SELECT count(purchase_id)
FROM purchases
WHERE users.id = purchases.user_id
AND payment_status = "Completed"
)) AS purchases_count
FROM (`users`)
WHERE `referred_by` = '1'
AND `created` >= '2015-01-01 00:00:00' // created = user's registration date
AND `created` <= '2015-12-31 23:59:59'
SELECT
COALESCE(SUM(amount), 0.00) AS purchases_amount,
COALESCE(SUM(ROUND(amount) * 10), 0) AS coins_earned,
COUNT(purchase_id) AS purchases_count
FROM purchases
WHERE
payment_status = "Completed"
AND user_id IN (
SELECT id FROM users
WHERE `referred_by` = '1'
AND `created` >= '2015-01-01 00:00:00'
AND `created` <= '2015-12-31 23:59:59'
)