0

これは私の取引を取得するための私の現在のクエリです:

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

これでうまく機能し、注文または取引テーブルで希望するフィールドでこのクエリを(並べ替えて)並べ替えることができます。

次に、取引をループしてforeach()で表示すると、このクエリを使用して、取引の顧客から平均的なレビュースターを取得できます。

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

ここで、ASC/DESCのすべての取引を平均的なスターから分類したいと思います。

これを行うには、そのクエリを上記のクエリとマージする必要があります。avg_starsを表示する必要がある場合は、2番目のクエリではなく、最初の唯一のクエリからこの値を取得します。

そのクエリを最初のクエリに「マージ」するにはどうすればよいですか?それが終わったら、ORDER BY avg_stars DESCを実行するだけで、これで並べ替えられますか?

4

1 に答える 1

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
于 2012-12-29T15:24:42.330 に答える