2012-12-29 54 views
0

查询排序这是我当前的查询抢我的交易:基于另一个querys AVG

SELECT deals.*, SUM(orders.cost) AS 'revenue' FROM deals 
LEFT JOIN orders ON (orders.deal_id = deals.id) 
WHERE 1 
AND (orders.status = 'new' OR orders.status = 'delivered') 
GROUP BY deals.ID 
ORDER BY revenue ASC 

现在这个伟大的工程,我可以排序此查询(ORDER BY)的任何领域我希望在订单或交易表。

然后当我遍历交易和同一个foreach(), 我有这个疑问抢客户的平均分点评的交易显示出来:

SELECT ROUND(AVG(stars)) as 'avg_stars' FROM deals_reviews WHERE deal_id = *THE DEAL_ID* AND active = '1' 

现在我想排序的所有ASC/DESC的交易来自平均星级。

要做到这一点,它需要我把这个查询与上面的一个合并,当我需要显示avg_stars时,我从第一个也是唯一的查询中获取这个值,而不是第二个查询。

如何将该查询合并到第一个中?所以当这样做完成后,我们可以做ORDER BY avg_stars DESC,它会按这个排序?

回答

0

我不知道如果我的理解对不对,但是这应该是解决方案

SELECT deals.*, SUM(orders.cost) AS 'revenue' FROM deals 
LEFT JOIN orders ON (orders.deal_id = deals.id) 
LEFT JOIN deals_reviews ON (deals.id = deals_reviews.deal_id AND active = '1') 
WHERE 1 
AND (orders.status = 'new' OR orders.status = 'delivered') 
GROUP BY deals.ID 
ORDER BY ROUND(AVG(stars)) as 'avg_stars' ASC 
+0

你好它的工作时,我把ROUND(AVG(星星))为“avg_stars”到选择,然后ORDER BY avg_stars。然而,检查我的更新问题上面的查询,我需要在交易_reviws中检查active = 1,我将如何做到这一点? – Karem

+0

好的更新我的答案againe,现在跳得很好。 – GreenRover